在 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-workmalloc
是 C,new
是 C++ - 那么为什么要标记这个 C++?
因为在 C++ 中通过 typecast ptr=(int*)malloc (10 *sizeof (int));它也可以工作因此也用 C++ 标记它。
内存分配,通过调用malloc()
(和函数族)获得,是堆中数据结构中的一个条目。当指向已分配内存的指针传递给free()
时,实际地址在堆中以某些“标题数据”为前缀,您的程序不应直接访问这些数据。 free()
函数使用该标头信息将整个分配的内存数据块链接回堆中的“可用”内存。因此,只需要调用一次free()
,因为 malloc 和 free 没有 int 数组的概念,如发布的代码中所示,
在 C++ 中使用malloc
,即使对于像整数数组这样简单的事情,也是一个坏习惯。如果您使用 C++ 编程,请尝试习惯使用 new
和 new[]
。
【参考方案1】:
malloc
留下 free
读取的注释。特别是,它会留下一个说明,说明分配了多少字节。
【讨论】:
不知道会不会有用。以上是关于在 C 或 C++ 中释放内存 [重复]的主要内容,如果未能解决你的问题,请参考以下文章