33,311
社区成员
发帖
与我相关
我的任务
分享
//有错的代码
#include<iostream>
using namespace std;
int main()
{
char *m = new char[6];
m = "abc";
cout << m << endl;
delete[]m; //这行代码提示出现断点
system("pause");
return 0;
}
//没有错误的代码
#include<iostream>
using namespace std;
int main()
{
char *m = new char[6];
char *n = m;
n = "abc"; //这里用m赋值的话,就无法正常显示了,请问为什么?
cout << n << endl;
delete[]m;
system("pause");
return 0;
}
char *m = new char[6];
m[0] = 'a';
m[1] = 'b';
m[2] = 'c';
m[3] = '\0';
cout << m << endl;
delete[]m;
//有错的代码
#include<iostream>
using namespace std;
int main()
{
char *m = new char[6];
m = "abc"; //这里指针变了,不再指向new char[6]的位置,而是静态常量区地址~~~
cout << m << endl;
delete[]m; //这行代码提示出现断点 //所以delete失败
system("pause");
return 0;
}
代码2:
//没有错误的代码
#include<iostream>
using namespace std;
int main()
{
char *m = new char[6];
char *n = m;
n = "abc"; //这里用m赋值的话,就无法正常显示了,请问为什么?
cout << n << endl;
delete[]m; //这里m的指向的地址没有变化啊,依旧是new char[6]; 所以不会有问题
system("pause");
return 0;
}
代码3:
[code=c] char *m = new char[6];
m[0] = 'a';
m[1] = 'b';
m[2] = 'c';
m[3] = '\0';
cout << m << endl;
delete[]m;[/code //没有问题哦,m的地址依旧没变,还是new char[6];
数组蜕化后可成指针 char *a = new char[3];
a[0] = 'a';
a[1] = 'b';
a[2] = '\0';
delete a;
而a="ab"; 是给指针a赋地址。
我之前把赋值和地址搞错了