如何在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
动态分配的内存量。 您应该单独存储此数字,以及指向已分配的内存块的指针。 此外,每次使用realloc
或free
都必须更新此编号。
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。