如何在C中获取动态创建的结构数组的长度?

我目前正在尝试获取动态生成的数组的长度。 它是一个结构数组:

typedef struct _my_data_ { unsigned int id; double latitude; double longitude; unsigned int content_len; char* name_dyn; char* descr_dyn; } mydata; 

我像这样初始化我的数组:

 mydata* arr = (mydata*) malloc(sizeof(mydata)); 

然后使用realloc重新调整它并开始用数据填充它。

然后,我尝试使用此处描述的代码获取其大小。

 sizeof(arr) / sizeof(arr[0]) 

即使我的数组包含两个元素,此操作返回0

有人可以告诉我我做错了什么吗?

如果您需要知道动态分配的数组的大小,您必须自己跟踪它。

sizeof(arr) / sizeof(arr[0])技术仅适用于编译时已知大小的数组,以及C99的可变长度数组 。

sizeof不能用于查找使用malloc动态分配的内存量。 您应该单独存储此数字,以及指向已分配的内存块的指针。 此外,每次使用reallocfree都必须更新此编号。

 mydata* arr = (mydata*) malloc(sizeof(mydata)); 

pointer而不是array 。 要创建两个mydata项的array ,您需要执行以下操作

 mydata arr[2]; 

其次,要使用malloc()分配mydata两个元素,您需要执行以下操作:

 mydata* arr = (mydata*) malloc(sizeof(mydata) * 2); 

OTOH,动态分配内存的长度(使用malloc() )应该由程序员维护(在变量中) – sizeof()将无法跟踪它!

您正在尝试使用一个众所周知的技巧来查找数组中的元素数量。 不幸的是,你的例子中的arr 不是数组,它是一个指针。 那么你所在的部门所获得的是:

 sizeof(pointer) / sizeof(structure) 

这可能总是为0。