我至少有一年没有用C编写代码,并且正试图通过编写一个非常基本的校准软件来完善它。基本上我有一个PointCloud结构

typedef struct {
    gsl_vector ** vectors;
    gsl_vector * mean;
} PointCloud;


vectors指向gsl_vectors的数组,而mean只是表示gsl_vector中向量均值的vectors

现在假设我有一个变量PointCloud * foo,并假定其内部变量具有使用malloc()动态分配的内存并已填充。让bar = foo -> vectors。如何获得gsl_vectors中的bar数(即点云中的向量数)?我尝试了各种组合,例如sizeof(bar)/sizeof(bar[0]),但是给了我输出1。sizeof(bar)本身给了我值8。我已经在具有27个向量的点云上进行了尝试。

最佳答案

sizeof operator是编译时运算符。当应用于某些指针时,它给出了您的计算机上指针的大小(在我的x86-64 / Linux系统上为8字节),并且由于它是在编译时计算的,因此它并不取决于编译器的运行时大小。动态分配的堆内存区域。

您需要将任何动态malloc -ed数组或区域的大小保持在某个地方。您可以考虑以flexible array member结尾struct并保持其大小为该struct的前一个成员

09-06 13:14