VC++变量空间问题

各位牛人,本人在用vc++编程时遇到问题,发现声明变量的时候,空间是有限的,以下语句“intdata[512][512]”,编译无错,运行出错。料想是编译器对变量申请空间... 各位牛人,本人在用vc++编程时遇到问题,发现声明变量的时候,空间是有限的,以下语句“int data[512][512]”,编译无错,运行出错。料想是编译器对变量申请空间是有限制的,请了解具体原因的高手帮忙解释,感激不尽。(本人分数实在是不多,不好意思)
大家可以试一下的,声明变量为[500][500]就不会有错,就是空间有限制,最开始我是用的[1024][1024],不行,然后又一点点试的,这是毕设中遇到的,之前老师就给我提过,小心空间有限制,我一试发现真的,我提问是希望懂的人详细说一下vc++,在这方面有什么限制。
展开
 我来答
flxchy1987
2010-05-15
知道答主
回答量:50
采纳率:0%
帮助的人:21.8万
展开全部
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

int *p=new int[512][512],空间分配在堆上
int data[512][512],空间分配在栈上

堆和栈的分配空间大小的限制是有区别的:

一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的。

例如,在VC6下面,默认的栈空间大小是1M(好像是,记不清楚了),所以data[512][512]大小的空间为2的21次方位,大于1M,分配后程序会出错。

当然,我们可以修改:
打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后在Reserve中设定堆栈的最大值和commit。
注意:reserve最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较大会使栈开辟较大的值,可能增加内存的开销和启动时间。
蓝色水天160
2010-05-15 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:127万
展开全部
现在的电脑应该不会直接出错。是不是其他错误。。比如越界了
你调试一下跟踪看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
破空大巫师
2010-05-15 · 超过16用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:38.4万
展开全部
一般是访问违例
可以使用调试,它会给你指出哪个地方段异常(也就是访问违例处)
然后你可以查看一下各种变量地址,以便找出错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式