为何VC中改变数组大小就会有问题

lkxjtu 2009-06-26 04:42:04
在General Class成员变量中有一个数组,数组大小定义#define MAX_WORD_NUM 1000
现需要对数组大小进行调整,变小没有问题,只要一变大(比如1500),在new这个class的时候就会出错(就是那种回报还是不回报的错误,这种错误通常是空指针时会出现)
不明白怎么回事!不知道是vc6.0的bug还是自己程序有问题,各位xdjm遇到过此类怪问题吗?
...全文
80 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkxjtu 2009-06-29
  • 打赏
  • 举报
回复
的确,改用new之后就可以了!
这是为什么,是堆栈溢出了么?new这个类和在这个类中去new数组同样是放在堆里,栈大小不会变化,那为什么一个溢出另一个就不会溢出呢?
还是说一个对象的大小是有限制的?
Starmean 2009-06-26
  • 打赏
  • 举报
回复
如果你只是修改宏定义值,重新编译出错。
那么应该不是这个数组问题,而是你针对些数组的算法有露洞,修改数组大小后,就会发生越界,或者是因为该数组的增加而造成其它方面的问题。
比如说将一个数组复制到另一数组中,如果该数组变大了,但另一数组却没变,就会访问另一数组越界。调试跟踪一下该数组的数据流向,看看到哪一步出现问题就会明白的。
young_t 2009-06-26
  • 打赏
  • 举报
回复
另,注意,这种错误,在release的时候是不会报错的.你运行的时候会发现一个非常奇特的现象,"程序突然不在了",没有任何提示.
young_t 2009-06-26
  • 打赏
  • 举报
回复
兄弟,堆栈溢出了.大BUF都要用new,或者在setting里面改变你的stacksize.
qingfeng5211 2009-06-26
  • 打赏
  • 举报
回复
按照你的思路见了工程试了一下,我把数组大小改到15000都没问题啊。应该是别的地方有问题。你调试一下,把错误提示和出错的地方都贴出来看看
悟迟 2009-06-26
  • 打赏
  • 举报
回复
嗨,估计这个宏多处地方用到,修改后没有全部编译。
bragi523 2009-06-26
  • 打赏
  • 举报
回复
看了半天
没整明白
lkxjtu 2009-06-26
  • 打赏
  • 举报
回复
那是在编译之前改变静态数组的大小当然可以了,10楼没有明白我的意思,呵呵~
wenfh2020 2009-06-26
  • 打赏
  • 举报
回复
只要数组大小超过 256 的都用 new !
路人乙2019 2009-06-26
  • 打赏
  • 举报
回复
必须是个常数而不是变量,既然是常量,为什么又要去改变它?
lkxjtu 2009-06-26
  • 打赏
  • 举报
回复
没有初始化,有问题么?
na_he 2009-06-26
  • 打赏
  • 举报
回复
呵呵,明白了,是类里面有数组,可以通过宏定义来调整了。构造函数中对对数组初始化了没有呀?
Ryanwen 2009-06-26
  • 打赏
  • 举报
回复
猜不出来,贴代码
lkxjtu 2009-06-26
  • 打赏
  • 举报
回复
#define MAX_WORD_NUM 1000


class CScriptModel{
...
private:
WordStruct m_Words[MAX_WORD_NUM];
}

new的代码就是最简单的new CScriptModel()



WordStruct是12字节大小的结构体
na_he 2009-06-26
  • 打赏
  • 举报
回复
呵呵,最基础的问题哦!
lkxjtu 2009-06-26
  • 打赏
  • 举报
回复
已经重新编译通过了啊
rebecca_zjy 2009-06-26
  • 打赏
  • 举报
回复
静态数组不能改变大小的吧
你可以一开始new一个100的,要改大小的时候delete再new,可以参考CString类的源码
na_he 2009-06-26
  • 打赏
  • 举报
回复
数组是不能随意调整大小的,只能用链表来替代了。
或者重载一下了,当大小改变时,重新定一个数组,把原来的值拷贝过来了。
Conry 2009-06-26
  • 打赏
  • 举报
回复
贴代码
不要让别人来猜
你的类定义,new这个类的代码

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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