c - 当指针未知时,如何释放 C 中的内存?

标签 c pointers memory memory-management

我希望释放我没有指向的内存块。在我的程序中,我依次调用了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/

相关文章:

c++ - 动态内存,堆栈内存和静态内存与c++的区别?

powershell - PowerShell 管道正在执行时没有垃圾收集

c - 将字符串映射到枚举值

c - 如何选择数组中的随机行?

c - 当我们在 C 中将两个指针等式化时会发生什么?

android - 如何在parse.com和Android平台上获取指针值?

c++ - 矩形算法中的多边形?

c++ - 将成员函数指针的 vector 传递给函数

c - 从用户那里获取内存地址

C - 如何正确释放指向 n 字符数组 ((*p)[n]) 的指针的内存?