这么用delete为什么会出错
这样用delete为什么会出错。
char* sss = new char[10];
printf("%d",&sss);
sss = "abcd";
printf("%d",&sss);
delete sss;
我用了new动态分配内存,但delete仍然出错了。
这是为什么?两次printf输出的地址是一样的。
顺便问一个问题:console程序如果不用getchar(),scanf之类等待用户输入的代码,如何让程序在黑窗口停住?(不是指press any key to continue这种停住,因为这时候程序跑完了,进程表里已经没这个进程了)
------解决方案--------------------
delete[] sss; .
------解决方案--------------------
内存泄露。。。。
sss后来指向了常量数据区,不能使用delete释放。。。(delete释放的是堆内存)
------解决方案--------------------
------解决方案--------------------
delete后边是new返回的堆上空间的指针,现在因为你给sss重新赋值,已经找不到那个堆上空间了,现在sss指向了数据区了,当然不能delete。
char * tmp = sss;
...
delete tmp;
------解决方案--------------------
char* sss = new char[10];
printf("%d",&sss);
sss = "abcd"; //哥们,已经找不到你分配的内存空间了,
改为:memcpy(sss,"adcb",4);
printf("%d",&sss);
delete []sss; //怎么声明,怎么删除,
这样就好了;
------解决方案--------------------
sss = "abcd";
这里已经改变了sss的地址
你应该用 sprintf(sss,"abcd");
------解决方案--------------------
char* sss = new char[10];
printf("%d",&sss);
strcpy(sss,"abcd");//sss = "abcd";串改了指针地址,而不是指针内容
printf("%d",&sss);
delete sss;
------解决方案--------------------
char* sss = new char[10];
printf("%d",&sss);
sss = "abcd";
printf("%d",&sss);
delete sss;
我用了new动态分配内存,但delete仍然出错了。
这是为什么?两次printf输出的地址是一样的。
顺便问一个问题:console程序如果不用getchar(),scanf之类等待用户输入的代码,如何让程序在黑窗口停住?(不是指press any key to continue这种停住,因为这时候程序跑完了,进程表里已经没这个进程了)
------解决方案--------------------
delete[] sss; .
------解决方案--------------------
内存泄露。。。。
sss后来指向了常量数据区,不能使用delete释放。。。(delete释放的是堆内存)
------解决方案--------------------
------解决方案--------------------
delete后边是new返回的堆上空间的指针,现在因为你给sss重新赋值,已经找不到那个堆上空间了,现在sss指向了数据区了,当然不能delete。
char * tmp = sss;
...
delete tmp;
------解决方案--------------------
char* sss = new char[10];
printf("%d",&sss);
sss = "abcd"; //哥们,已经找不到你分配的内存空间了,
改为:memcpy(sss,"adcb",4);
printf("%d",&sss);
delete []sss; //怎么声明,怎么删除,
这样就好了;
------解决方案--------------------
sss = "abcd";
这里已经改变了sss的地址
你应该用 sprintf(sss,"abcd");
------解决方案--------------------
char* sss = new char[10];
printf("%d",&sss);
strcpy(sss,"abcd");//sss = "abcd";串改了指针地址,而不是指针内容
printf("%d",&sss);
delete sss;
------解决方案--------------------
- C/C++ code
void main() { char* sss = new char[10]; printf("%d\n",&sss); sss = "abcd"; //sss其实是一个指针,这里"abcd"是一个常量字符数组,此时sss将保存 //"abcd"的首地址,已经不指向new char[10]分配的空间了 printf("%d\n",&sss); delete sss; //所以这里不能用delete释放sss所指向的空间,因为sss指向的空间是"abcd"的首地址 }
------解决方案--------------------
------解决方案--------------------