#include <iostream.h>
void main()
{
char *p=new char[4];
p="as";
cout<<p<<endl;
delete []p;
}
为什么在程序结束的时候会出错,这到底是什么错误?delete后是清空指针所指的内容还是另指针无效,再调用指针都会出错吗?但在delete之前加p=NULL再delete就好使
delete为什么释放内存
答案:1 悬赏:40 手机版
解决时间 2021-05-08 19:21
- 提问者网友:人傍凄凉立暮秋
- 2021-05-08 02:12
最佳答案
- 五星知识达人网友:迷人又混蛋
- 2021-05-08 03:36
p=NULL; 之后,就变成 delete 空指针了,只是 delete 的容错机制允许传入一个空指针而已,不代表没有问题。
问题的关键在于你的赋值语句错了。
char *p=new char[4]; // p 是一个指向4个字符的指针
p="as"; // 注意这里,"as" 是一个静态字符串指针
这个赋值语句,是把 "as" 的指针地址,赋给 p。
delete []p; 就变成了释放 "as" 这个静态字符串指针,当然会出错。
应该改为用字符串复制函数:
strcpy(p, "as");
或者更安全的:
//#include <strsafe.h>
StringCbCopyA(p, 4, "as");
问题的关键在于你的赋值语句错了。
char *p=new char[4]; // p 是一个指向4个字符的指针
p="as"; // 注意这里,"as" 是一个静态字符串指针
这个赋值语句,是把 "as" 的指针地址,赋给 p。
delete []p; 就变成了释放 "as" 这个静态字符串指针,当然会出错。
应该改为用字符串复制函数:
strcpy(p, "as");
或者更安全的:
//#include <strsafe.h>
StringCbCopyA(p, 4, "as");
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯