这么用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[] 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那种做法可以吗?