程序在释放先前分配的内存后中止

时间:2012-04-17 04:57:15

标签: c dynamic memory-management

我会请求您提供一些非常简单的程序的帮助,该程序实现了搜索计划算法。好吧,我得到的问题对我来说有点奇怪:在为一个函数中本地声明的简单字符数组分配内存后,我在这个数组上工作,它具有所有预期的行为,一切正常,但当我调用函数结束前,该函数的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& #34;或者"免费"并且所有编写的代码都是无条件执行的(在任何" if"或类似的情况下)。当然,最后一个行为并不包括分配测试,但是你得到了我所说的。

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

哦,我差点忘了:正如你可能注意到的那样,程序在C中。

1 个答案:

答案 0 :(得分:3)

如果您在v_ReadALineOfTheWorld范围之外写作,可能会发生这种情况。一些malloc库在区域内的包装器中存储有关malloc d区域的信息,如果您损坏了信息free可能会崩溃。