动态结构数组中的元素数

时间:2015-11-17 14:17:25

标签: c arrays dynamic realloc

我有这些结构:

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]); 

我尝试了这个,但它不起作用。可能有什么问题?

2 个答案:

答案 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);