发现geany不错,比什么emacs, vim 等好用多了

如下的程序:
#include <stdio.h>
#define NN 20000
#define NEIGHBOR 100
void main()
{
int neigh[NN][NEIGHBOR],i,j,k;
double poiss[NN][NEIGHBOR],dt,as;
double pcg(int neigh[NN][NEIGHBOR], double poiss[NN][NEIGHBOR], double dt);

for(i=0;i<NN;i++)
{
for(j=0;j<NEIGHBOR;j++)
{
neigh[i][j]=2;
poiss[i][j]=3.0;
}
}
dt=10.0;

as=pcg(neigh,poiss,dt);
printf("data is %f\n",as);
}
double pcg(int neigh[NN][NEIGHBOR], double poiss[NN][NEIGHBOR], double dt)
{
return neigh[8][2]+poiss[2][5]*dt;
}

编译运行后就会出现Segmentation fault错误。我的系统是ubuntu 10.04。

如果采用较小的数组,如下的两个宏定义
#define NN 20
#define NEIGHBOR 10
则程序能够运行.
当采用较大的数组时,比如源程序中的两个宏定义,程序就会出现段错误。我计算过,这时程序所需要的内存只有几十M,系统肯定能提供这些内存。
为什么还会出现段错误呢? 请大牛指教,并最好能给出解决方法。由于计算需要,还需要更大的数组.
谢谢啦!
附件:
try.c [525 Bytes]
还未被下载

作者: ltpeach   发布时间: 2011-03-03

堆栈不够用,改成动态分配或者全局

作者: BigSnake.NET   发布时间: 2011-03-03

如下的程序:
#include <stdio.h>
#define NN 20000
#define NEIGHBOR 100
void main()
{
int neigh[NN][NEIGHBOR],i,j,k;
double poiss[NN][NEIGHBOR],dt,as;
double pcg(int neigh[NN][NEIGHBOR], double poiss[NN][NEIGHBOR], double dt);

for(i=0;i<NN;i++)
{
for(j=0;j<NEIGHBOR;j++)
{
neigh[i][j]=2;
poiss[i][j]=3.0;
}
}
dt=10.0;

as=pcg(neigh,poiss,dt);
printf("data is %f\n",as);
}
double pcg(int neigh[NN][NEIGHBOR], double poiss[NN][NEIGHBOR], double dt)
{
return neigh[8][2]+poiss[2][5]*dt;
}

编译运行后就会出现Segmentation fault错误。我的系统是ubuntu 10.04。

如果采用较小的数组,如下的两个宏定义
#define NN 20
#define NEIGHBOR 10
则程序能够运行.
当采用较大的数组时,比如源程序中的两个宏定义,程序就会出现段错误。我计算过,这时程序所需要的内存只有几十M,系统肯定能提供这些内存。
为什么还会出现段错误呢? 请大牛指教,并最好能给出解决方法。由于计算需要,还需要更大的数组.
谢谢啦!
附件:
try.c [525 Bytes]
还未被下载

作者: ltpeach   发布时间: 2011-03-03

堆栈不够用,改成动态分配或者全局

作者: BigSnake.NET   发布时间: 2011-03-03