C++中,free函数为什么会报错?

C++中,free函数为什么会报错?,第1张

如果是编译错误,则表明没有包括头文件cstdlib

如果是运行错误,则表示free函数参数的指针值有错误,主要如下:

1、指向目标并不是可以释放的空间

2、指向目标已经释放过了,现在重复释放

3、指针值为0

4、不是原来动态分配空间的首地址

具体情况还得看看代码才行

首先肯定你的主动思考,学习的主动性

然后明确说,malloc/free有多种不同的实现,可以认为都是采用第二种办法,或者变相采用第二种办法。

首先说静态变量行不通,不太可能只调用一次malloc,调第二次就覆盖掉了,行不通。

一般的实现,是把分配内存的长度等信息放在malloc来的指针的前面,用一个小结构来记录分配的大小以及状态信息,想要查证也不难,去下载一些源代码阅读一下就行。

至于你说的释放最近一次分配的内存,是另一个话题,涉及到内存泄漏。

举个小片段:

char a = (char )malloc(100);

a = (char )malloc(100);

free(a);

分配了两次,只能free最后一次分配的,前一次分配的,丢掉了,找不回来。

这个最后一次,指的是这个意思

delete是释放new开辟的内存。new和delete 开辟再堆中内存时候会调用构造函数和析构函数

malloc和free不会调用。free释放内存,并不是真正意义上的把那块内存清空了,他只是告诉 *** 作系统这块内存可以被再次使用,如果 *** 作系统以后用这块内存的话就会把上面的数据覆盖掉。malloc多大内存就要用free多大内存。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12177075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存