Sign-up....

菜鸟求救!关于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]
# 1 Re: 菜鸟求救!关于new和delete的傻瓜问题!

分配数组空间应该定义大小啊!

zhaokugua at 2005-5-15 21:24:15 >
# 2 Re: 菜鸟求救!关于new和delete的傻瓜问题!

好像是什么内存泄漏吧?p_string 指向一个空的char类型数组,当输入字符时改变了,内存没法回收了哈,其实我也是菜鸟,仅是个人观点,等高手来!

tiesoftware at 2005-5-15 21:42:24 >
# 3 Re: 菜鸟求救!关于new和delete的傻瓜问题!

new 没有用对。

hf1414 at 2005-5-15 21:43:11 >
# 4 Re: 菜鸟求救!关于new和delete的傻瓜问题!

用new时给数组分配内存时要指定大小的,例如:

int * p;

p = new int[10]; //分配整型数组的内存,数组有10个元素

jxliang at 2005-5-15 21:47:37 >
# 5 Re: 菜鸟求救!关于new和delete的傻瓜问题!

同意楼上的

redweee at 2005-5-15 22:56:11 >
# 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;

}

llf_hust at 2005-5-15 23:10:03 >
# 7 Re: 菜鸟求救!关于new和delete的傻瓜问题!

你看,你上面的指针指向那里,是由系统自己分配的吧,

你的问题是没有初始化

iangenius at 2005-5-15 23:25:24 >
# 8 Re: 菜鸟求救!关于new和delete的傻瓜问题!

同意 llf_hust()

zhousqy at 2005-5-15 23:26:18 >
# 9 Re: 菜鸟求救!关于new和delete的傻瓜问题!

new数组没指定大小

zhousqy at 2005-5-15 23:27:16 >
# 10 Re: 菜鸟求救!关于new和delete的傻瓜问题!

new 数组应该指定大小///

char* p_string = new char [N] ;

N为const常量/

你这边没有指定大小/去掉delete []p_string;后程序可以执行/是因为内存尚可支持你输入的字符数组/不会造成崩溃///delete不delete 都一样/

yesiloveyou at 2005-5-16 14:59:53 >
# 11 Re: 菜鸟求救!关于new和delete的傻瓜问题!

new 表达式,进行内存分配,然后让p_string指向这块内存,

发生两件事情:

1.调用operator new进行内存分配

2.如果内存分配成功,则对于这块内存,调用相应的constructor

又因为delete [] 的数组版本,若不显式提供数组的大小,不知道将释放多少内存,结果unexpected!!

visual4825 at 2005-5-17 17:46:31 >
# 12 Re: 菜鸟求救!关于new和delete的傻瓜问题!

多谢各位热情的帮助!

当使用new为数组分配空间的时候,的确需要提供数组的大小

那么这个大小是只能使用常量来提供,还是可以使用变量提供?

lovehome_13520 at 2005-5-17 21:19:34 >
# 13 Re: 菜鸟求救!关于new和delete的傻瓜问题!

那就不知道了!!

zsh6709 at 2005-5-17 21:24:59 >
# 14 Re: 菜鸟求救!关于new和delete的傻瓜问题!

第一维可以是常量,变量,表达式,其它维必须是常量,且不可省略,呵呵,正在学,课件上强调的。

gready at 2005-5-18 1:29:37 >
# 15 Re: 菜鸟求救!关于new和delete的傻瓜问题!

>> 当使用new为数组分配空间的时候,的确需要提供数组的大小

>> 那么这个大小是只能使用常量来提供,还是可以使用变量提供?

可以是常量,也可以是变量,而且变量更为常见。

whyglinux at 2005-5-18 9:23:34 >
# 16 Re: 菜鸟求救!关于new和delete的傻瓜问题!

再次感谢各位的热心帮助!

lovehome_13520 at 2005-5-19 19:28:23 >
# 17 Re: 菜鸟求救!关于new和delete的傻瓜问题!
指定大小~~~
yates0 at 2005-05-19 19:42:00 >

C/C++

All Classified