2014-02-25 41 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

相关问题