鱼C论坛

 找回密码
 立即注册
查看: 3879|回复: 6

定义数组超过20000个就崩溃退出,求解释

[复制链接]
发表于 2012-7-5 19:22:46 | 显示全部楼层 |阅读模式
10鱼币
做一个程序,要存一系列未知长度的数据,用链表麻烦。直接定义了一个20000个单元的数组,为什么要定义20000个。因为我测试发现超过20000个。程序就会崩溃。
而且我定义了4个数组,也会崩溃。
最后4个数组每个定义成5000个单元,就不会崩溃了。

我知道,一个程序在栈中最多可以开辟多大空间。
这是由什么决定的。

最佳答案

查看完整内容

VC 里面的函数框架如下 _declspec(naked) int Fun() { _asm{ push ebp mov ebp,esp sub esp,立即数 push ebx push esi push edx } //这里写你的C代码 _asm { pop edi pop esi pop ebx mov esp,ebp pop ebp ret } } //debug版本下这个立即数减去0x40就是栈空间的大小。有一种办法可以自己分配栈空间 大小,就是写裸函数,在函数定义上面写上_declspec(naked),然后函数里面写一个_asm{ ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-5 19:22:47 | 显示全部楼层
VC 里面的函数框架如下
_declspec(naked)
int Fun()
{
_asm{
push ebp
mov ebp,esp
sub esp,立即数
push ebx
push esi
push edx
}

//这里写你的C代码
_asm
{
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret
}
}
       //debug版本下这个立即数减去0x40就是栈空间的大小。有一种办法可以自己分配栈空间             大小,就是写裸函数,在函数定义上面写上_declspec(naked),然后函数里面写一个_asm{}  在大括号 里面写上我上面的这几行代码,这就是内嵌汇编,然后开始写你的C代码,sub esp,立即数  这个立即数是你想分配的栈空间大小,你想分配多大分配多大,若实际很大的话,听楼上的,申请内存空间,放到堆里面。。定义在全局试试,当然申请是最好的。还有,就算申请 也是有限制的,因为内存空间就那么大。。。

评分

参与人数 1鱼币 +5 收起 理由
丿夏夜灬彬刂 + 5 很给力!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 20:14:06 | 显示全部楼层
你不要在栈上搞这么大的空间。是在要空间,new出来或者malloc出来都可以。
VC6里面有个地方可以设置栈空间大小的,我忘记在什么地方了,不过这种问题一般还是在堆里处理比较好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 20:54:38 | 显示全部楼层
C++有多种容器可供选择,vector可以满足你对运行时数据动态增长的需要,且支持随机访问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 21:28:54 | 显示全部楼层
:lol大神见解啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-25 17:28:31 | 显示全部楼层
定义外部变量 栈不够用了 就不要用栈的啦
  1. #include<stdio.h>
  2. int num[30000];
  3. int main(){
  4.         num[29999]=99;
  5.         printf("%d",num[29999]);
  6.         return 0;
  7. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-30 19:46:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 11:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表