Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc调用realloc,然后崩溃_C_Crash_Malloc_Embedded Linux - Fatal编程技术网

malloc调用realloc,然后崩溃

malloc调用realloc,然后崩溃,c,crash,malloc,embedded-linux,C,Crash,Malloc,Embedded Linux,我正在linux嵌入式设备中使用一个守护进程,该守护进程在运行时会随机崩溃,通常是在启动几个小时后。我调查了crash reportstack转储,发现它在两种情况下崩溃,请遵循以下调用跟踪: 案例1。我的函数->calloc->malloc->reallockcrash by SIGSEGV 案例2。my function->calloc->malloc->realloc->abort-> 西加布拉什 我读了这个链接,我的问题似乎是因为堆损坏 我为内存分配函数malloc、calloc、rea

我正在linux嵌入式设备中使用一个守护进程,该守护进程在运行时会随机崩溃,通常是在启动几个小时后。我调查了crash reportstack转储,发现它在两种情况下崩溃,请遵循以下调用跟踪:

案例1。我的函数->calloc->malloc->reallockcrash by SIGSEGV 案例2。my function->calloc->malloc->realloc->abort-> 西加布拉什 我读了这个链接,我的问题似乎是因为堆损坏

我为内存分配函数malloc、calloc、realloc和free制作了自己的wrapper版本,以便在分配的内存周围附加围栏,并通过哈希表对其进行监控,这样我可以检测缓冲区溢出或释放两次。然而,它仍然崩溃,没有任何内存冲突在我的围栏

所以我想问两个问题:

你有什么想法来调试这种问题吗? malloc什么时候打电话给realloc?我在glibc上简要地查看了malloc源代码,没有看到对realloc的调用。
我的同事发现了根本原因通过调查核心转储文件和libc malloc的源代码,有一点是由于链表的delete函数=>corrupted memory=>calloc crash中的错误,它会写入一个已释放的内存


实际上,malloc不调用realloc,而是调用uu malloc\u consolution。在libc的obj转储文件中,u_malloc_将asm代码整合在realloc的asm代码下,因此我认为malloc调用realloc。

如果您能够在托管的Linux机器上运行代码,请在valgrind下运行。它会告诉你哪里内存管理不好。你能用一个小测试用例重新创建这个吗?代码是否在运行用户空间?代码是否总是检查calloc、malloc和realloc的结果是否分配失败?如果malloc正在调用realloc,则它可能将mallocsize实现为reallocNULL、size。您检测到缓冲区溢出或空闲两次-但您是否检测到空闲而不是mallocated?