1

我将向您寻求一些帮助,该程序实现了搜索计划算法,非常非常简单。好吧,我遇到的问题对我来说有点奇怪:在为函数中本地声明的简单字符数组分配内存后,我处理了这个数组,它具有所有预期的行为并且一切正常,但是当我调用free() 函数在函数结束之前对该数组执行,程序停止并中止。如果有人对这个问题有一些经验(或没有......)可以帮助我,我会非常感激。好吧,这里遵循一些“模拟”代码来显示我在说什么(这不完全是写的,而是:

char* v_AllTheWorld
char* v_ReadALineOfTheWorld;

v_AllTheWorld = malloc(COLUMNS * LINES * sizeof(char)); /*LINES and COLUMNS are defined constants*/

if(v_AllTheWorld == NULL)
{
    fprintf(stderr, "..."); //etc, etc.
    exit(1);
}

v_ReadALineOfTheWorld = malloc(COLUMNS * sizeof(char)); /*the "sizeof(char)" looks useless, but there's no point in talking about that here, i guess.*/

if(v_ReadALineOfTheWorld == NULL)
{
    fprintf(stderr, "..."); //etc, etc.
    exit(1);
}

while(/*some_condition (number of lines to be read)*/)
{
    //read data string from stream and stores in v_ReadALineOfTheWorld (fscanf);
    //appends the read data to v_AllTheWorld (strncat);
}

free(v_ReadALineOfTheWorld);
/*The program is stopping right after this call in the debug.*/

return v_AllTheWorld;

我没有把函数的头部,它的声明,也没有详细表示流或数据是如何操作的,但是没有进行其他“malloc”或“free”的调用,所有的编写的代码是无条件执行的(在任何“如果”或类似的情况下)。当然,最后一个行为不包括分配测试,但你明白我的意思。

所以,好吧,我希望我这样做是正确的,我希望我以正确的方式详细说明了问题,我希望你能帮助我。

哦,我差点忘记了:你可能注意到了,这个程序是用 C 语言编写的。

4

1 回答 1

3

如果您在v_ReadALineOfTheWorld. 一些malloc库将有关mallocd 区域的信息存储在该区域周围的包装器中,如果您损坏该信息free可能会崩溃。

于 2012-04-17T05:01:08.573 回答