我会请求您提供一些非常简单的程序的帮助,该程序实现了搜索计划算法。好吧,我得到的问题对我来说有点奇怪:在为一个函数中本地声明的简单字符数组分配内存后,我在这个数组上工作,它具有所有预期的行为,一切正常,但当我调用函数结束前,该函数的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中。
答案 0 :(得分:3)
如果您在v_ReadALineOfTheWorld
范围之外写作,可能会发生这种情况。一些malloc
库在区域内的包装器中存储有关malloc
d区域的信息,如果您损坏了信息free
可能会崩溃。