我在访问具有可变大小数组的结构(传递给函数的数组)的指针时遇到问题。
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/