首页 文章

C - 释放在另一个文件中分配的堆内存

提问于
浏览
0

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

具体来说:我有一个包含 Headers 的 main.c 文件,比如 test.h . 在链接到 test.htest.c 中,使用malloc显式分配内存 . main.c 调用 test.c 中的函数 . 出于某种原因,当我试图在 test.c 中的函数内释放内存时,我总是收到一个错误:

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堆栈中的任何内存 . 显然 stdlib.h 包括在内 . 会发生什么事? main.ctest.c 是否有单独的堆,并且每当调用后者并返回结果时,分配的堆内存已经被释放?我真的很难过 . 我可以在 main.c 中分配和释放内存而不会出现任何问题 . 他们有相同的包括 .

3 回答

  • 2

    在运行时没有'different files'之类的东西 . 所有文件都通过链接集成到一个大的二进制代码中 . 因此,显然只有一个堆 .
    你的问题必须是别的,因为你从未释放过内存,也许你正试图释放静态分配的内存或类似的东西

    此外,请注意,有一个通常很好的防止内存泄漏的惯例,它说:分配内存的程序部分也负责释放它 . 它与您的问题没有直接关联,但是为了防止内存泄漏,将来尝试这样做将会有所帮助 .

  • 1

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

  • 4

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

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

相关问题