几行VC程序,编译没问题,一运行就崩溃,为什么?

tyrant19 2012-04-11 09:38:42
VC2010编译一个小程序

#define N 1000000
void main(){
int nRand[N];//不能太大,否则栈溢出? 为何编译时不报错误?
}

在win7上面,一运行就崩溃。
为什么?
...全文
258 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
verywzm 2012-04-12
  • 打赏
  • 举报
回复
堆栈溢出

可以改为申请全局、静态或者动态数组,就不会报错了
http://hi.baidu.com/cfans/blog/item/d3842838d8a7602cb9998f49.html
shenyi0106 2012-04-12
  • 打赏
  • 举报
回复
栈的大小是针对于运行线程的!
dengzikun 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
我并没有读写的溢出操作,只是定义了而已。
为什么会导致崩溃? 这块内存既没有被读也没有被写。

堆栈前后也没有破坏
[/Quote]

运行到
int nRand[N];
时,系统做堆栈分配,VC线程缺省堆栈大小一般为1M字节,然后就非法了。
向立天 2012-04-11
  • 打赏
  • 举报
回复
编译只做语法检查
语法没错误当然就不报错
tyrant19 2012-04-11
  • 打赏
  • 举报
回复
我并没有读写的溢出操作,只是定义了而已。
为什么会导致崩溃? 这块内存既没有被读也没有被写。

堆栈前后也没有破坏
Eleven 2012-04-11
  • 打赏
  • 举报
回复
就好比数组溢出,编译的时候无错误,运行就可能崩溃~
  • 打赏
  • 举报
回复
扩大栈空间的大小

方法为(VC6):项目->属性->链接器->系统->堆栈保留大小

许文君 2012-04-11
  • 打赏
  • 举报
回复
语法上不错就不会报错,它可不会去考虑你堆栈是否溢出了。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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