我在访问具有可变大小数组的结构(传递给函数的数组)的指针时遇到问题。



        char name[20];
        char value[20];
   }param_t;
   typedef struct object {
        char name[20];
        int no_of_params;
        param_t params[];
   };

int main()
{
    int no_of_objs = 3, no_of_params = 5;
    object_t *objs = malloc(no_of_objs * (sizeof(object_t) + (no_of_params * sizeof(param_t)) );
     //...
     //...

     objs++;  //Increment to point to the next item <-- Problem: ignores params[] size

     // blah
     // blah
     // blah


我已分配内存以具有3个object_t,每个object_t存储5个param_t。

内存分配很好,我可以为成员设置值。
objs [0]很好。
现在,如果我增加objs(objs ++)指向下一个对象,则它实际上指向上一个对象的参数地址。它完全忽略了params []。
现在,如果我为第二个* objs设置值,它实际上将覆盖先前* objs的params []。

我的问题是:这是C编译器中的错误吗?
如果没有,如何遍历objs?

最佳答案

根据Bathsheba的答案,您最好将其实现为指向对象的指针数组:

int no_of_objs = 3, no_of_params = 5;
object_t **objs = malloc(no_of_objs * sizeof(object_t *);
for (int i=0; i<no_of_objs; i++)
    objs[i]= malloc ((sizeof(object_t) + (no_of_params * sizeof(param_t)) );

关于c - 如何增加具有可变长度数组的结构的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57909745/

10-09 09:22