我用C++编写了一个简单的代码,并在Linuxubuntu11.04上用g++编译它,没有任何错误,但是当我运行可执行文件时,我得到了这个错误“分段错误”。
我知道我的代码没有问题,that这个错误与编译器有关。
有人能帮我吗?
我的代码是:
#include <math.h>
int main()
{
double a[200][200][200],b[200][200][200],c[200][200][200];
int i,j,k;
double const pi=3.14;
for(k=0;k<200;k++)
{
for(j=0;j<200;j++)
{
for(i=0;i<200;i++)
{
a[i][j][k]=sin(1.5*pi*i)*cos(3.5*pi*j)*k;
b[i][j][k]=cos(1.5*pi*i)*cos(2.5*pi*k)*j;
c[i][j][k]=a[i][j][k]-b[i][j][k];
}
}
}
}发布于 2012-06-02 11:19:03
此功能可帮助您:
double ***alloc3d(int l, int m, int n) {
double *data = new double [l*m*n];
double ***array = new double **[l];
for (int i=0; i<l; i++) {
array[i] = new double *[m];
for (int j=0; j<m; j++) {
array[i][j] = &(data[(i*m+j)*n]);
}
}
return array;
}发布于 2011-10-03 14:49:54
这三个数组所需的空间大约为190 of,几乎可以肯定地超过了操作系统规定的堆栈大小限制。
尝试在堆上分配它们(使用new),而不是将它们放在堆栈上。
发布于 2011-10-03 15:04:48
您正在将大量的double数组放到堆栈上(假设体系结构就是这样做局部变量的)。几乎可以肯定的是,您的系统堆栈不能容纳那么多空间。
相反,使用向量在堆上分配:
std::vector<std::vector<std::vector<double> > > a(200, std::vector<std::vector<double> >(200, std::vector<double>(200)));https://stackoverflow.com/questions/7636638
复制相似问题