我有realloc函數的問題:* glibc的檢測* realloc的():無效的下一個大小:
*** glibc detected *** realloc(): invalid next size:
這裏是代碼的相關部分:
char* pathfile = NULL;
int tcpargc=6;
char *tcpargv[tcpargc];
int it;
for (it = 0;it < tcpargc;it++)
tcpargv[it] = NULL;
...
while (1) {
...
if (pathfile == NULL)
pathfile=(char*)malloc((strlen(RAMDIR)+strlen(tempfilename)+7)*sizeof(char));
else {
if ((tmp=(char*)realloc(pathfile,(strlen(RAMDIR)+strlen(tempfilename)+7)*sizeof(char))) == NULL)
{
printf("ERROR: realloc failed");
free(pathfile);
}
else
pathfile = tmp;
}
...
if (tcpargv[4] == NULL)
tcpargv[4]=(char*)malloc((strlen("--infile=")+strlen(pathfile)+1)*sizeof(char));
else {
if ((tmp = (char*)realloc(tcpargv[4],strlen("--infile=")+strlen(pathfile)+1)*sizeof(char))) == NULL){
printf("ERROR: realloc failed");
free(tcpargv[4]);
}
else
tcpargv[4] = tmp;
}
...
}
我都檢查一遍並再次,但我找不到錯誤。
謝謝你的幫助。
如果沒有更多信息,我們不太可能找到它。你能用調試器找出它崩潰的地方嗎?一個註釋:在C中,'sizeof(char)'的定義是1。你可以放棄它。在你釋放它之後, – 2010-09-21 17:36:19
將釋放的ptr設置爲NULL:'free(pathfile); pathfile = NULL;'。我注意到你測試的指針在循環中爲NULL;釋放它**不會讓它空**。 – pmg 2010-09-21 17:38:38
您可能會發現它有助於在Valgrind http://valgrind.org下運行您的程序。它能夠自動識別代碼中的內存分配錯誤。 – 2010-09-21 17:42:15