簡體   English   中英

“ free():無效的下一個符號(快速)”錯誤的含義是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM