![](/img/trans.png)
[英]what does "fast" or "normal" mean in "free(): invalid next size (fast)"?
[英]What does the 'free(): invalid next sign (fast)' error really mean?
假設我有一個分配和釋放內存的程序foo
。 我這樣運行:
./foo something.foo
它運行完美,沒有錯誤退出。 現在,如果將文件的第一行設置為#!/path/foo
,請更改權限,然后將其作為./something.foo
運行,程序將正確運行,但是在退出之前,我會看到以下信息:
*** Error in '/path/foo': free(): invalid next size(fast): 0x019e2008 ***
Aborted
我已經看到了很多有關free(): invalid next sign(fast)
的問題free(): invalid next sign(fast)
,所有問題都帶有特定的代碼示例。 所以我有兩個問題:
#!/path/foo
而不是./foo
時出現錯誤? 嗯,通過更改來解決此問題
some_var = malloc(sizeof(char *));
至
some_var = malloc(CONSTANT);
這意味着您的程序中有堆損壞。 該消息告訴您C庫如何檢測到損壞,而不是如何發生損壞。
堆損壞是要跟蹤的特別隱蔽的錯誤,因為它通常不會在錯誤發生的時間點出現,而會在以后的某個時間點出現。 盡管有損壞,程序很有可能繼續工作,這意味着它可能是一個已存在數周或數月的錯誤,與您正在測試和調試的任何最新更改無關。
對堆破壞的最佳響應通常是使用valgrind之類的工具,該工具可以與程序一起運行,並且通常(盡管並非總是)能夠查明有問題的代碼在哪里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.