读书人

这么用delete为什么会出错

发布时间: 2012-09-07 10:38:15 作者: rapoo

这样用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[] sss;                        .


[解决办法]
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"的首地址}
[解决办法]
探讨
哦,是我犯糊涂了。

指针本身的地址是没有变化,地址内的内容变化了。

那这样可以不可以:
char* sss = new char[10];
char* sss_temp;
sss_temp=sss;
sss = "abcd";
delete sss_temp;

这样还会有内存泄露吗?

[解决办法]
探讨
谁能指导下我8L那种做法可以吗?

读书人网 >C++

热点推荐