关于delete

tiandiyishaou2010 2010-10-03 02:04:41
请看代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
const int m=5;
void main()
{
char re[m];
cin.getline(re,m,'#');
puts(re);
delete []re;
system("pause");
}

我在控制台输入的是:wangfeng
结果:wang
Debug Assertion failed
Expression:_BLOCK_TYPE_IS_VALID(pHead_>nBlockUse)
For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
..........

我的delete 哪里用错了,请指教啊,新手上路~~


...全文
74 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
harderman 2010-10-03
  • 打赏
  • 举报
回复
new和delete是要成对出现的,使用new分配的存储空间是在堆上申请的,使用结束后它不会自动释放,需要我们使用delete进行释放,要不就会造成内存泄露的可能.
如果申请了单个空间,释放的时候应该是delete p;
如果是申请了连续的一组空间,释放的时候就应该是delete[]p;
cmlr_ 2010-10-03
  • 打赏
  • 举报
回复
先new才行,因为delete后面要跟一个指针,而new返回一个指针,
顺便提醒:刚申请好的空间最好先置零一下,因为很可能有乱的数据,因而要抹去重写
superwavelet 2010-10-03
  • 打赏
  • 举报
回复
先new才行啊
haow85 2010-10-03
  • 打赏
  • 举报
回复
没有用 new 申请空间。
maoxing63570 2010-10-03
  • 打赏
  • 举报
回复
char re[m];
放在栈上的,不要你delete,它生命结束的时候会自动弹出的
char *re=new char[m]
放在堆上的,需要delete来释放

#include <iostream>
#include <cstddef>
using namespace std;
int main ()
{
const size_t m=10;
char *re=new char[m];
delete [] re;
return 0;
}
shenchenman 2010-10-03
  • 打赏
  • 举报
回复
想用delete就用new初始化吧
doctor1190 2010-10-03
  • 打赏
  • 举报
回复
char re[m];
delete []re;

re不是动态分配的,是编译时分配空间,所以不能用delete;delete 是和 new 搭配使用,只有new出来的空间才能用delete;

改为char *re=new char[m]; 就可以了

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧