首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组初始化时,予许分配多大空间?解决思路

2012-04-04 
数组初始化时,予许分配多大空间?为什么用数组分配,编译器报告:**.exe中的 0x00db1b37 处有未经处理的异常:

数组初始化时,予许分配多大空间?
为什么用数组分配,编译器报告:**.exe中的 0x00db1b37 处有未经处理的异常: 0xC00000FD: Stack overflow

而用动态malloc分配空间,则可以正常运行。

是因为程序编译与运行时为数据分配空间的地方不一样吗?(代码如下)

#define N 100000

int s[N] = {0};

----------------------------

#define N 100000

int * p;

*p = (int *)malloc(N * sizeof(int));

-------------------------------

(代码测试驱体就不贴了)
请大家不吝赐教,谢谢!

[解决办法]
具体有多大,我也不知道,没测试过!不过有一点是肯定的一般是都够用的!
[解决办法]
孩子,上面的数组s[N]分配的是栈空间,下面malloc的是堆空间...好好看看内存分配的书吧
[解决办法]
栈内存最大1024m
[解决办法]

探讨

孩子,上面的数组s[N]分配的是栈空间,下面malloc的是堆空间...好好看看内存分配的书吧

[解决办法]
如果是在linux下,可以使用ulimit -s查看堆栈空间大小是8192kb,但实际可分配没有这么大,根据你写的程序代码大小编译后有点关系,就是教科书上讲的代码段之类的。
当然手勤的话自己可以测试一下。

不过有必要分配这么大的数组吗?
[解决办法]
简单地说,程序员使用的内存空间分为堆和栈,你用malloc申请的内存空间属于堆,大小基本不受限制,而你所使用的其他变量所占的空间程序运行时放在栈里,栈的大小一般不超过几M

如果需要使用的内存较小,比如大小不过百的数组,就直接定义,这样程序运行时它放在栈里面,速度快
如果需要使用的内存较大,比如你想要的数组,就必须用malloc申请,因为栈大小有限,而且它是程序运行的基本需求,你跟程序基本需求抢地方,无论抢得过还是抢不过,最终都是想让程序正常运行的你倒霉

热点排行