我不了解程序中出现段错误错误的原因。
该代码可用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),或者,如果您不关心重入,则应静态分配它们。