我不了解程序中出现段错误错误的原因。
该代码可用here

在第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];

该程序运行良好,但是当我声明第二个PclImage时,我在启动该程序后立即遇到段错误。

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

谁能帮我?

最佳答案

如果将PclImage声明为局部变量(在堆栈上),则由于堆栈溢出而可能会出现段错误。
PclImage是一个包含307,200个元素的数组,每个元素的大小(可能)约为20个字节,因此整个数组的大小约为6MB。堆栈足够大以容纳其中两个阵列的可能性很小。它可能甚至还不足以容纳一个(通常情况下,在大多数台式机操作系统上,假定您至少有1MB的可用堆栈空间通常是安全的)。

当您拥有如此大的对象时,应动态分配它们(使用malloc和friends),或者,如果您不关心重入,则应静态分配它们。

09-25 18:50