变量声明导致分段错误

Muf*_*ffo 11 c typedef segmentation-fault variable-declaration

我不明白程序中出现分段错误的原因.代码可在此处获得

在第29行,我声明了一个PclImage变量,使用typedef定义,类似于struct数组.PclImage类型的定义如下(来自src/libMyKinect.h文件):

typedef struct {
    int valid;
    float x;
    float y;
    float z;
    unsigned char blue;
    unsigned char green;
    unsigned char red;
} Point3d;

typedef Point3d PclImage[480][640];
Run Code Online (Sandbox Code Playgroud)

该程序运行良好,但当我声明一秒钟时PclImage,我一启动程序就会出现分段错误.

例如,如果在第一个文件的第30行,我添加PclImage bgPcl;程序立即崩溃.

谁能帮我?

Jam*_*lis 14

如果将a声明PclImage为局部变量(在堆栈上),则可能由于堆栈溢出而导致分段错误.

PclImage是一个包含307,200个元素的数组,每个元素(可能)大小约为20个字节,因此整个数组的大小约为6MB.堆栈大小不足以包含其中两个阵列; 它可能甚至不足以包含一个(作为一般规则,在大多数桌面操作系统上通常可以安全地假设您至少有1MB的堆栈空间可用).

当你有这么大的对象时,你应该动态地分配它们(使用malloc和朋友),或者,如果你不关心重入,静态地分配它们.