在 C 或 C++ 中释放内存 [重复]

Posted

技术标签:

【中文标题】在 C 或 C++ 中释放内存 [重复]【英文标题】:Freeing memory in C or C++ [duplicate] 【发布时间】:2016-04-06 00:30:55 【问题描述】:

让我们声明一个指针

int *ptr;
ptr=malloc (10 *sizeof (int));
free (ptr);

问题是free() 将如何释放内存。假设int 为 4 个字节,int 的内存为 40 个字节。 编译器将理解删除malloc 提供的第一个内存位置,但它如何清除另外 9 个其他 36 字节的 int 数据?

【问题讨论】:

查看***.com/questions/1119134/how-do-malloc-and-free-work malloc 是 C,new 是 C++ - 那么为什么要标记这个 C++? 因为在 C++ 中通过 typecast ptr=(int*)malloc (10 *sizeof (int));它也可以工作因此也用 C++ 标记它。 内存分配,通过调用malloc()(和函数族)获得,是堆中数据结构中的一个条目。当指向已分配内存的指针传递给free() 时,实际地址在堆中以某些“标题数据”为前缀,您的程序不应直接访问这些数据。 free() 函数使用该标头信息将整个分配的内存数据块链接回堆中的“可用”内存。因此,只需要调用一次free(),因为 malloc 和 free 没有 int 数组的概念,如发布的代码中所示, 在 C++ 中使用malloc,即使对于像整数数组这样简单的事情,也是一个坏习惯。如果您使用 C++ 编程,请尝试习惯使用 newnew[] 【参考方案1】:

malloc 留下 free 读取的注释。特别是,它会留下一个说明,说明分配了多少字节。

【讨论】:

不知道会不会有用。

以上是关于在 C 或 C++ 中释放内存 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C 和 C++ 中如何分配和释放 *array* 内存?

在释放内存之前转换为void *(C编程)[重复]

从 C++ 调用 C# com 对象,谁应该释放内存?

C++之内存管理:申请与释放

C++如何正确释放内存?

C++ 关于内存泄露问题。内存泄露是指用new 分配的内存没有用delete释放,如果未释放会有啥后果?