QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1507|回复: 9

菜鸟请问为什么会出现段错误?

[复制链接]
发表于 2006-6-18 16:21:10 | 显示全部楼层 |阅读模式
我在一个程序中要给以下几个四维浮点型数组赋初值。。
Temp[DAY][19][41][19]
mean[DAY][19][41][19]
time_UT[DAY][1000]
time_LST[DAY][1000]
lat_all[DAY][1000]
lon_all[DAY][1000]

当把DAY定义为1000的时候,编译完成以后运行就会出现段错误。。
而当把DAY定义为60的时候,则可以正常运行。。

请问为什么会出现这种情况,以及应该怎么解决呢??
谢谢
 楼主| 发表于 2006-6-18 16:22:37 | 显示全部楼层
linux下是否对数组容量的大小有所限制??
感觉也不是很大啊,可能就50多兆而已~
回复

使用道具 举报

 楼主| 发表于 2006-6-18 16:53:41 | 显示全部楼层
刚才问了一个同学,说是可能是gcc的原因,可以在makefile中加一个参数予以解决~但是具体是什么他也忘了。。。。请问还有高手知道啊~~拜一个~~ :-)
回复

使用道具 举报

发表于 2006-6-19 09:50:16 | 显示全部楼层
是有这问题
[code:1]
#include <stdio.h>

main()
{
    char temp[16000][16000];
    printf("hello\n");
}
[/code:1]
回复

使用道具 举报

发表于 2006-6-19 09:55:10 | 显示全部楼层
ulimit -a显示stack size是8M,会不会是这个问题?
回复

使用道具 举报

 楼主| 发表于 2006-6-19 16:21:33 | 显示全部楼层
我查了一下,同学的SGI3000上在.cshrc文件中加上语句limit stacksize unlimited就可以了。。。
但是我在FC4系统下的csh.cshrc文件中加入这一段并不行,在csh.login中也不行。。。
用ulimit -a查了一下,我的stacksize默认为10240K,但是我的数组都在70兆以上,所以会出现段错误,目前的解决办法是在运行程序之前在shell上输入ulimit -s unlimited和ulimit -d unlimited。然后运行程序就一切正常了,缺点是一旦关闭终端,下次运行程序也要重复上述输入比较麻烦。。

不太清楚怎么改配置文件把stacksize和datasize都改成unlimited,因为要处理的数据都很庞大~默认的根本不够用

请问各位大哥还有人知道阿?
回复

使用道具 举报

发表于 2006-6-19 17:07:24 | 显示全部楼层
使用setrlimit(2)函数可以在函数中修改stack的size.
如果修改放在构造器中或者ld.so中可以在main之前修改。
回复

使用道具 举报

发表于 2006-6-19 19:48:33 | 显示全部楼层
fc4默认的shell不是csh,可以放到启动教本或者bashrc里。
在程序里设置是最好的办法,如楼上。
回复

使用道具 举报

 楼主| 发表于 2006-6-22 14:45:42 | 显示全部楼层
谢谢楼上的两位,我的问题已经解决了,FC4在.bashrc里添上两句:
ulimit -s unlimited
ulimit -d unlimited
就可以了,还是觉得一劳永逸的比较方便,呵呵
回复

使用道具 举报

发表于 2006-6-29 23:06:47 | 显示全部楼层
如果把数组都改成static的全局量,而不修改stack size limit不知可不可以.
这样就不使用stack来存放局部量了.
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 12:34 , Processed in 0.036014 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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