gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:38 24 4
gpt4 key购买 nike

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

具体来说:我有一个 main.c 文件,其中包含一个 header ,比如 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 中分配和释放内存。它们具有相同的包含。

最佳答案

在运行时没有“不同的文件”这样的东西。所有文件在链接时都集成到一个大的二进制代码中。所以,因此,显然只有一个堆。
你的问题一定是别的原因,因为你从来没有释放内存,也许你正试图释放静态分配的内存或类似的东西

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

关于C - 释放在另一个文件中分配的堆内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com