首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大矩阵计算

大矩阵计算
EN

Stack Overflow用户
提问于 2011-10-03 14:48:00
回答 5查看 604关注 0票数 5

我用C++编写了一个简单的代码,并在Linuxubuntu11.04上用g++编译它,没有任何错误,但是当我运行可执行文件时,我得到了这个错误“分段错误”。

我知道我的代码没有问题,that这个错误与编译器有关。

有人能帮我吗?

我的代码是:

代码语言:javascript
复制
#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];
            }
        }
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-02 11:19:03

此功能可帮助您:

代码语言:javascript
复制
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;
}
票数 2
EN

Stack Overflow用户

发布于 2011-10-03 14:49:54

这三个数组所需的空间大约为190 of,几乎可以肯定地超过了操作系统规定的堆栈大小限制。

尝试在堆上分配它们(使用new),而不是将它们放在堆栈上。

票数 13
EN

Stack Overflow用户

发布于 2011-10-03 15:04:48

您正在将大量的double数组放到堆栈上(假设体系结构就是这样做局部变量的)。几乎可以肯定的是,您的系统堆栈不能容纳那么多空间。

相反,使用向量在堆上分配:

代码语言:javascript
复制
std::vector<std::vector<std::vector<double> > > a(200, std::vector<std::vector<double> >(200, std::vector<double>(200)));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7636638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档