如果是编译错误,则表明没有包括头文件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多大内存。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)