【发布时间】:2016-04-06 00:30:55
【问题描述】:
让我们声明一个指针
int *ptr;
ptr=malloc (10 *sizeof (int));
free (ptr);
问题是free() 将如何释放内存。假设int 为 4 个字节,int 的内存为 40 个字节。
编译器将理解删除malloc 提供的第一个内存位置,但它如何清除另外 9 个其他 36 字节的 int 数据?
【问题讨论】:
-
malloc是 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[]。