我得到了下面的代碼和平segmentation fault (core dumped)
段錯誤(我執行malloc()
,free()
和realloc()
):一個奇怪的不明原因
void free(void* ptr)
{
void* curr = head;
void* before = NULL;
int isLegal = 0;
/*Line X*/printf("curr is %p and ptr is %p\n", curr, ptr);
if(curr == ptr)
{
printf("aaa");
}
else
{
printf("bbb");
}
/*Some more code that actually frees the pointer and not relevant here*/
}
現在,你會認爲它會打印aaa
或bbb
,它只是在執行第X行中的printf()
後立即宣佈分段錯誤。如果我鍵入「printf(」a「)」而不是當前的printf()
,它將根本不打印'a'。這真的很奇怪。 它打印:
curr is 0x86be000 and ptr is 0x86be000
,但它只是退出,之後扔分割故障。 變量head
是該文件中的一個靜態變量。我真的很想知道問題在哪裏,這真的很奇怪。以下是頭文件中的聲明:
void free(void* ptr);
就這麼簡單,你看到這裏有什麼問題嗎? 完整的代碼是可用的here但我懷疑它是相關的,程序應該至少打印'aaa'或'bbb',但它不這樣做。 有什麼想法?我真的很絕望。帶有警告遵守,但
代碼既然你不不打印換行符或使用'fflush',您的printf輸出不會被刷新。如果您正在使用它們進行調試,則應在每個打印語句中使用換行符。 – JS1
@ JS1我不明白,你基本上說我應該只是添加'\ n'或使用'fflush(stdout)'?不與任何工作。 – Jack
因此,在更改'aaa'和'bbb'來添加換行符後,您在輸出中看不到任何內容,但仍然可以看到以前的printf輸出?我不是說它會修復你的segv,只是你應該看到'aaa'或'bbb'。 segv可能在稍後發生。 – JS1