我有这些结构:
typedef struct g {
int i;
float f;
}Txy;
typedef struct s {
Txy *x;
}Tstruct;
我希望x是一个动态数组,所以我每次想要添加一个新元素时运行它。
Tstruct s;
s.x = (Txy*)realloc(s.x, sizeof(Txy) );
在我向数组中添加一些元素后,我需要找出当时有多少元素在数组中。
int num = sizeof(s.x) / sizeof(s.x[0]);
我尝试了这个,但它不起作用。可能有什么问题?
答案 0 :(得分:1)
在指针上使用sizeof
的问题在于,你得到的是指针的大小而不是它所指向的大小。
如果您需要尺寸,您需要自己跟踪它。将成员字段添加到Tstruct
结构中,类似于
typedef struct s {
Txy *x;
size_t size; // size of x
}Tstruct;
由您自行决定是否希望大小为已分配内存的元素数或字节大小。
答案 1 :(得分:1)
您忘记指出新元素数量:
s.x = (Txy*)realloc(s.x, sizeof(Txy) * numElements);