我希望释放我没有指向的内存块。在我的程序中,我依次调用了malloc
,希望malloc(1)
、malloc(4)
、malloc创建的内存(5)
是连续的。然后,当我只有指向 malloc(5)
的指针时,我释放这些内存。但我想不出如何做到这一点;我不能简单地创建一个引用 ptr[-5] 地址的指针然后释放 5 个字节的内存吗?如何才能做到这一点?
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
malloc(1);
malloc(4);
char* ptr = malloc(5);
free(ptr);
}
最佳答案
你不能做你想做的事。你甚至不应该尝试做你想做的事。
即使您确切知道 malloc()
正在做什么,您的程序也会依赖于未定义的行为。当 C 库的新版本到来时,行为可能会改变,如果您使用不同的工具链(从 GNU C 切换到 Microsoft C 或其他工具)编译您的程序,您的程序几乎肯定会失败。
任何时候分配内存,都需要跟踪指针。如果您的程序甚至不知道内存,就没有办法释放它。
跟踪您的内存分配。如果您正在设计要动态分配的数据结构,您的设计应该包括跟踪它们的功能,例如在链接列表中保留地址列表或其他内容。
如果这看起来工作量很大,可以考虑使用托管语言,如 C# 或 Java 或 Python 或其他语言。
关于c - 当指针未知时,如何释放 C 中的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812478/