用new分配的数组和[]定义的数组有什么不同呢?

weiwozhonghua 2007-10-22 09:14:05
在一个类里面定义一个的数组(MEMBUFFER和LEVEL定义在类外面的结构体)
private:
int n;
MEMBUFFER mem_buffer[10];
LEVEL level[20];
可以正常运行.
但是改为
private:
int n;
MEMBUFFER *mem_buffer;
LEVEL level[20];
在初始化函数里:
mem_buffer=new MEMBUFFER[10];
程序就不能正常运行,主要表现是:
level[i].brec=mem_buffer[i].mb.brec;
执行了这条语句后改变了n的值为mem_buffer[i].mb.brec;(我试了它总是改变定义在mem_buffer前面的变量)
但是如果我把LEVEL level[20]放在定义的最前面,就没有这种现象了.
private:
LEVEL level[20];
int n;
MEMBUFFER *mem_buffer;

我一开始编的时候直接定义了数组都好好的.现在想改为动态数组就出现了这样的问题,由于代码太长结构也比较复杂,所以不能把程序贴出来,请大家分析以下可能的原因!谢谢!
...全文
541 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiwozhonghua 2007-10-23
  • 打赏
  • 举报
回复
终于知道原因了.是我程序的问题,的确是i的超出范围了,i变成了-1.其实i的范围因该是0-2.谢谢Chiyer和zhangyanli !再次谢谢!
thecorr 2007-10-22
  • 打赏
  • 举报
回复
应该是程序中相互的关联性吧?
感觉应该不会有这种问题的
星羽 2007-10-22
  • 打赏
  • 举报
回复
level[i].brec=mem_buffer[i].mb.brec;

i 从多少到多少?
goodluckyxl 2007-10-22
  • 打赏
  • 举报
回复
new还需要你delete
是在堆分配空间 效率教低
而[]直接在栈上分配 会自动释放 效率高
但是栈空间有限
ckt 2007-10-22
  • 打赏
  • 举报
回复
mem_buffer=new MEMBUFFER[10];
应该放在构造函数里

相应的delete在析构里
ckt 2007-10-22
  • 打赏
  • 举报
回复
new的数组是在堆上分配的空间,普通数组是在栈上
应该是你代码之间的关联造成的,
zhangyanli 2007-10-22
  • 打赏
  • 举报
回复
关键不知道你的MEMBUFFER和LEVEL的定义.
zhangyanli 2007-10-22
  • 打赏
  • 举报
回复
从你提供的信息上看,应该不会出现这种情况的,

而且i是从0-2的,也应该不是数组越界造成的破坏.

不懂?????????

另外,楼主小心:
"但是如果我把LEVEL level[20]放在定义的最前面,就没有这种现象了. "
没这种现象,可能有别的现象,可能有你不太关注的数据在被破坏着,这种错误
更可怕.
weiwozhonghua 2007-10-22
  • 打赏
  • 举报
回复
i是0到2

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧