读书人

请问一个delete语句的有关问题

发布时间: 2012-04-07 17:31:51 作者: rapoo

请教一个delete语句的问题。
const char *ch=new char[20];
delete [] ch;
以上语句编译时出现错误:rror C2665: 'delete ' : none of the 2 overloads can convert parameter 1 from type 'const char * '

是不是const型的不能释放呀?还是其他什么?
请教了。

[解决办法]
const char *ch=new char[20];这样动态申请的时候你怎么使用啊?
内容是不可改写的.
[解决办法]
const char *ch=new char[20]; 这样申请的空间无法使用!(内容无法修改)


char * const ch=new char[20]; 可以使用空间,但是 ch 指向不允许修改,这个比较合理
[解决办法]
注意const 在*的前面还是后面,在前面,指针指向的内容不可修改,在后面,指针本身是常量,不可修改
[解决办法]
我编译了一下,提示如下语句。
error C2664: 'delete ' : cannot convert parameter 1 from 'const char * ' to 'void * '
我觉得const char* ch声明了一个const char型的指针ch并指向了char[20]的空间。
delete[] ch将ch指向的内存收回,那么指针ch将指向void而不是char了,而恰恰ch被声明为了const型,所以无法转换。
将const去掉就可以编译过,不知道能否证明我的说法。
欢迎大家指正。
[解决办法]
const char *ch=new char[N];
...
ch=svec[i].c_str(); // 内存泄漏
...
delete [] ch; // 这时 ch 还是 svec[i].c_str(), 怎么可以delete 呢 ?

读书人网 >C++

热点推荐