由于我想在我的代码中出现一些内存错误,free(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并结束。我想知道是否存在一个函数(例如,will_fail_free(ptr)
)通知free(ptr)
将失败,因此根据will_fail_free(ptr)
的返回值,free(ptr)
不会被调用。< / p>
我想用最少的代码更改来解决这个问题。
我使用gcc
进行开发,mpixlc_r
进行并行运行。
答案 0 :(得分:0)
如果您正在使用malloc / calloc等,那么您可以编写一个自定义函数,如custom_malloc,并在其中调用实际的malloc / calloc,将返回的指针存储在全局指针数组中。
类似地写一个函数will_fail_free()并只检查传递的值是全局指针数组中的一个。这很简单。