注册 登录
编程论坛 C++教室

delete之后程序怎么退出了

andyzt406 发布于 2013-01-16 15:50, 1862 次点击
#include <iostream>  
#include <string>
using namespace std;

int main()
{
    char *p1="This is a test!";
    char *p=new char[strlen(p1)+1];  
    char *p_start=p;
    while((*(p++) = *(p1++)) != 0)
        ;  
    cout<< p_start<<endl;

    delete [] p;

    return 0;
}
在delete [] p;的时候程序怎么退出了啊,各位解释一下
12 回复
#2
rjsp2013-01-16 16:05
很简单呀,在 char *p=new char[strlen(p1)+1]; 之后打印一下 p 的值
然后在 delete [] p; 之前再打印一下 p 的值

这个不能算你粗心,只能算是不良编码风格引来的祸害
#3
zklhp2013-01-16 16:20
是不是要把C++程序写得不像C了才算学会C++?
#4
TonyDeng2013-01-16 18:09
以下是引用zklhp在2013-1-16 16:20:02的发言:

是不是要把C++程序写得不像C了才算学会C++?

C对C++的障碍和负面作用,我说过很多次,不真正深入下去,是没有意识的。不信邪的,见过鬼再说吧。
#5
fxbszj2013-01-16 18:37
char*,C++还是老实的用string吧
#6
锋了2013-01-16 20:57
delete [] p看着这么别扭啊!哪学的啊
#7
zhuanjia02013-01-20 20:02
回复 6楼 锋了
删除数组用的,那代码只要delete p;就行,你的意思是这样对吧?
#8
pangding2013-01-21 17:10
以下是引用锋了在2013-1-16 20:57:36的发言:

delete [] p看着这么别扭啊!哪学的啊

一般都这么写。
#9
rjsp2013-01-22 09:01
以下是引用pangding在2013-1-21 17:10:09的发言:


一般都这么写。

不一定,只是因为大部分人从C来的,习惯难改。
而在C++中delete[]是个关键字,我查了一下ISO/IEC 14882:2003(E),delete []出现了一次,其它都是delete[]
#10
pangding2013-01-22 09:59
以下是引用rjsp在2013-1-22 09:01:57的发言:


不一定,只是因为大部分人从C来的,习惯难改。
而在C++中delete[]是个关键字,我查了一下ISO/IEC 14882:2003(E),delete []出现了一次,其它都是delete[]
是哈,我看的时候没注意那个空格。那 delete [] 是什么意思呀?
#11
caoboxx2013-01-22 17:10
这是因为你
while((*(p++) = *(p1++)) != 0)
这个语句执行之后 p 指针已经指向了所分配内存的最后位置,当然不能成功
#include <iostream>  
#include <string>
using namespace std;

int main()
{
    char *p1="This is a test!";
    char *p=new char[strlen(p1)+1];  
    char *p_start=p;
    while((*(p++) = *(p1++)) != 0);  
    cout<< p_start<<endl;
    p=p_start;//添加此语句就可以了
    delete [] p;
    return 0;
}
#12
chinawide2013-01-23 16:07
回复 5楼 fxbszj
这是标准c++释放堆里所开的空间啊
#13
waterstar2013-01-23 16:56
11楼正解。
你的p值已经不是原来的那个了,或者可以直接删p_start,只是,最好别这么做,非常不好的习惯。
1