[英]C functions to create dynamic array of structs
有人可以帮助这段代码吗? 我省略了分配检查以保持简短。
typedef struct {
int x;
int y;
} MYSTRUCT;
void init(MYSTRUCT **p_point);
void plusOne(MYSTRUCT **p_point, int *p_size);
int main()
{
MYSTRUCT *point;
int size = 1;
init(&point);
plusOne(&point, &size);
plusOne(&point, &size);
point[1]->x = 47; // this was the problem
point[1].x = 47; // this is solution
return 0;
}
void init(MYSTRUCT **p_point)
{
*p_point = (MYSTRUCT *) malloc( sizeof(MYSTRUCT) );
}
void plusOne(MYSTRUCT **p_point, int *p_size)
{
(*p_size)++;
*p_point = realloc(*p_point, *p_size * sizeof(MYSTRUCT) ); // also calling to the function is fixed
}
我不明白为什么在调用函数后索引符号不起作用。
这是因为你没有乘以p_size
通过sizeof(MYSTRUCT)
中的呼叫realloc
,而不是分配结果返回p_point
:
*p_point = realloc(*p_point, *p_size * sizeof(MYSTRUCT));
笔记:
realloc
malloc
或realloc
的结果。 &size
传递给init
,并将其设置为1
。 您在进行一些类型混淆...这里:
MYSTRUCT *point;
您声明point
为一个指向MYSTRUCT
结构(或它们的数组)的指针。
语法point[i]
等效于*(point + i)
-换句话说,在添加了适当的偏移量之后,它已经取消了对指针的引用,从而产生MYSTRUCT
对象,而不是指向一个的指针。
语法p->x
等效于(*p).x
。 换句话说,它还期望p
是一个指针,将其取消引用,然后从该结构产生所请求的字段。
但是,由于point[i]
不再是指向MYSTRUCT
的指针, MYSTRUCT
在其上使用->
是错误的。 您正在寻找的是point[i].x
。 您也可以使用(point + i) -> x
,但是它的可读性很差...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.