繁体   English   中英

C - 释放堆 Memory 在另一个文件中分配

[英]C - Freeing Heap Memory Allocated in Another File

如果您有一个项目使用 makefile 编译多个文件和头文件,这会使堆复杂化吗?

具体来说:我有一个main.c文件,其中包括一个 header,比如test.h 在链接到test.ctest.h中,memory 被显式分配给 malloc。 main.c调用test.c中的函数。 出于某种原因,当我尝试在test.c中的函数内部释放 memory 时,我总是收到错误消息:

main(65245) malloc: *** error for object 0x106d012f8: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

...即使我从未在整个 makefile 堆栈中释放任何 memory,也会发生此错误。 显然stdlib.h包含在内。 会发生什么? main.ctest.c是否有单独的堆,并且每当调用后者并返回结果时,堆 memory 是否已分配? 我真的很难过。 我可以在 main.c 中分配和释放main.c没有任何问题。 它们具有相同的包含。

在运行时没有“不同文件”之类的东西。 所有文件在链接时都集成到一个大的二进制代码中。 因此,显然只有一个堆。
您的问题一定是其他问题,因为您从未释放过 memory,也许您正在尝试释放 static 分配的 memory 或类似的东西

另外,请注意,有一个约定通常可以很好地防止 memory 泄漏,它说:分配 memory 的程序部分也负责释放它。 它与您的问题没有直接关系,但它有助于将来尝试去做,以防止 memory 泄漏。

您是否在每个文件中释放相同的地址/指针? 是的,除非您专门尝试获得多个堆,否则您将获得 1 个堆。 我的猜测是您没有释放相同的指针 - 可能是某种寻址/双指针错误。 您最好为我们发布一些源代码以确保...

所有 malloc() 调用都从同一个堆分配,无论您从哪个文件调用它们。 您正在释放一个不是来自任何 malloc() 调用的指针。

仔细检查您的代码,将分配和释放的指针值打印到调试日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM