菜鸟求救!关于new和delete的傻瓜问题!
int main()
{
char* p_string = new char [] ;
cin >> p_string ;
cout << p_string << endl ;
delete []p_string ;
return 0;
}
VC6.0下,编译和构件都能通过,但运行就出现错误,错误提示如下:
Debug Error!
Program:...\Debug\newstring.cpp
DAMAGE:after Normal Block(#45)at 0x004800E0.
去掉delete后就运行正常,但这样内存就没有得到释放
菜鸟一个,还请高人指点!
[302 byte] By [
msdn] at [2007-8-14 13:02:57]

# 4 Re: 菜鸟求救!关于new和delete的傻瓜问题!
用new时给数组分配内存时要指定大小的,例如:
int * p;
p = new int[10]; //分配整型数组的内存,数组有10个元素
# 6 Re: 菜鸟求救!关于new和delete的傻瓜问题!
#include<iostream.h>
int main()
{
char* p_string = new char [] ;//char *p_string = new char[20]
cin >> p_string ;
cout << p_string << endl ;
delete []p_string ;
return 0;
}
# 7 Re: 菜鸟求救!关于new和delete的傻瓜问题!
你看,你上面的指针指向那里,是由系统自己分配的吧,
你的问题是没有初始化
# 10 Re: 菜鸟求救!关于new和delete的傻瓜问题!
new 数组应该指定大小///
char* p_string = new char [N] ;
N为const常量/
你这边没有指定大小/去掉delete []p_string;后程序可以执行/是因为内存尚可支持你输入的字符数组/不会造成崩溃///delete不delete 都一样/
# 11 Re: 菜鸟求救!关于new和delete的傻瓜问题!
new 表达式,进行内存分配,然后让p_string指向这块内存,
发生两件事情:
1.调用operator new进行内存分配
2.如果内存分配成功,则对于这块内存,调用相应的constructor
又因为delete [] 的数组版本,若不显式提供数组的大小,不知道将释放多少内存,结果unexpected!!
# 12 Re: 菜鸟求救!关于new和delete的傻瓜问题!
多谢各位热情的帮助!
当使用new为数组分配空间的时候,的确需要提供数组的大小
那么这个大小是只能使用常量来提供,还是可以使用变量提供?
# 15 Re: 菜鸟求救!关于new和delete的傻瓜问题!
>> 当使用new为数组分配空间的时候,的确需要提供数组的大小
>> 那么这个大小是只能使用常量来提供,还是可以使用变量提供?
可以是常量,也可以是变量,而且变量更为常见。