2014-02-25 40 views
0

由於我的代碼中存在一些內存錯誤,因此free(ptr)僅在其他許多輸入中失敗。我遇到的錯誤消息之一是:確定空閒(ptr)是否會失敗

Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 
pspmxm: malloc.c:3551: munmap_chunk: Assertion `ret == 0' failed. 

Program received signal SIGABRT, Aborted. 
0x00007ffff6f9d475 in *__GI_raise (sig=<optimized out>) 
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 
64  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory. 

該程序收到SIGABRT並結束。我想知道是否存在通知free(ptr)將失敗的功能(例如,will_fail_free(ptr)),以便根據返回值will_fail_free(ptr),不調用free(ptr)

我想用最少的代碼更改來解決這個問題。

我使用gcc用於開發目的,mpixlc_r用於並行運行。

+0

爲了看看該函數是否會失敗,應該調用該函數:))看起來類似於暫停問題 – mangusta

+1

您應該重新思考/重構您的內存分配策略。 – moooeeeep

+1

首先,修復內存錯誤。第二,'int will_free_fail(void * ptr){return 0;}' – immibis

回答

0

如果你使用的是malloc/calloc等,那麼你可以編寫一個像custom_malloc這樣的自定義函數,並在其中調用實際的malloc/calloc,將返回的指針存儲在全局指針數組中。

同樣寫一個函數will_fail_free(),只是檢查傳入的值是否存在於全局指針數組中。這很簡單。

+0

親愛的@AgA,我已經檢查過從malloc()返回的指針的值和傳遞給'free )'。它不會改變。 – Kadir

相關問題