帮忙看看这个语法有关问题,那里错了
帮忙看看这个语法问题,那里错了。
//1,
char *name;
name = NULL; //(1)
.......
.......
if(name)
delete [] name; //(2)
//这种初始化是我看的书上的写法,我只是添了一个if(name),编译没问题,执行的时候,(1)可以执行,但到了(2)就会出错。
//2,
char *name;
name = new char[strlen( "none ")+1];
name = "none "; //(1)
.......
.....
delete [] name; //(2)
//这种初始化,编译也没有问题,执行的时候(1)可以执行,但是到了(2)也会出错。提示是 debug assertion failed!
这都是为什么出错呢,是因为环境么。我的是vc6.0。
我也知道一种正确写法:
name = new char[strlen( "none ")+1];
strcpy(name, "none ");
......
......
delete [] name;
我想知道的时前两个为什么会错呢?
请教高手。
------解决方案--------------------
1:
char *name;
name = NULL;
if(name)
delete [] name; //name 只是一个普通的指针,没有对它进行动态的内存分配,不能使用delete[]操作
2:
char *name;
name = new char[strlen( "none ")+1];//在这里虽然是对name进行了动态的内存分配操作
name = "none "; //但是在这里,又对name指针进行的重新的赋值操作,name现在指向的是 "none "这个字符串返回的一个const char *类型的指针,当然之后就不可以对其他进行delete []name操作,而且原先你所分配的new char[strlen( "none ")+1]没有进行delete [],产生了内存泄漏了
------解决方案--------------------
if(name) delete []name是个愚蠢的做法
C++里 delete一个0指针是安全的
------解决方案--------------------
name = new char[strlen( "none ")+1];
name = "none "; //(1)
name 被重新指向一个 const 字符串首地址,
而不是吧 字符串拷贝到 name 分配的地址中来,
delete 只能释放 为name 分配的地址,
但是 1 语句执行后,name不是指向 这个分配的地址的,
所以出错。
//1,
char *name;
name = NULL; //(1)
.......
.......
if(name)
delete [] name; //(2)
//这种初始化是我看的书上的写法,我只是添了一个if(name),编译没问题,执行的时候,(1)可以执行,但到了(2)就会出错。
//2,
char *name;
name = new char[strlen( "none ")+1];
name = "none "; //(1)
.......
.....
delete [] name; //(2)
//这种初始化,编译也没有问题,执行的时候(1)可以执行,但是到了(2)也会出错。提示是 debug assertion failed!
这都是为什么出错呢,是因为环境么。我的是vc6.0。
我也知道一种正确写法:
name = new char[strlen( "none ")+1];
strcpy(name, "none ");
......
......
delete [] name;
我想知道的时前两个为什么会错呢?
请教高手。
------解决方案--------------------
1:
char *name;
name = NULL;
if(name)
delete [] name; //name 只是一个普通的指针,没有对它进行动态的内存分配,不能使用delete[]操作
2:
char *name;
name = new char[strlen( "none ")+1];//在这里虽然是对name进行了动态的内存分配操作
name = "none "; //但是在这里,又对name指针进行的重新的赋值操作,name现在指向的是 "none "这个字符串返回的一个const char *类型的指针,当然之后就不可以对其他进行delete []name操作,而且原先你所分配的new char[strlen( "none ")+1]没有进行delete [],产生了内存泄漏了
------解决方案--------------------
if(name) delete []name是个愚蠢的做法
C++里 delete一个0指针是安全的
------解决方案--------------------
name = new char[strlen( "none ")+1];
name = "none "; //(1)
name 被重新指向一个 const 字符串首地址,
而不是吧 字符串拷贝到 name 分配的地址中来,
delete 只能释放 为name 分配的地址,
但是 1 语句执行后,name不是指向 这个分配的地址的,
所以出错。