【发布时间】:2011-07-04 19:46:48
【问题描述】:
如何在 C 中获取动态分配数组的长度?
我试过了:
sizeof(ptr)
sizeof(ptr + 100)
他们没有工作。
【问题讨论】:
-
在 C 中,不要强制转换 malloc() 的返回值。见stackoverflow.com/questions/953112/…。
标签: c
如何在 C 中获取动态分配数组的长度?
我试过了:
sizeof(ptr)
sizeof(ptr + 100)
他们没有工作。
【问题讨论】:
标签: c
你不能。您必须将长度作为参数传递给您的函数。指针的大小是包含地址的变量的大小,这就是您找到 4(32 位地址空间)的原因。
【讨论】:
由于 malloc 只是返回一块内存,因此您可以在块中添加额外的信息来告知数组中有多少元素,如果您无法添加说明数组大小的参数,这是一种解决方法
例如
char* ptr = malloc( sizeof(double) * 10 + sizeof(char) );
*ptr++ = 10;
return (double*)ptr;
假设你可以在 PHP 中读取数组之前,我不熟悉的语言。
【讨论】:
这里你看到了 C 的危险:一个 ptr 只是指向内存并且无法知道假定的大小是多少。您可以不断增加,操作系统最终可能会抱怨,或者您的程序崩溃,或损坏其他程序。您应该始终指定大小,并自己检查边界!
【讨论】:
【讨论】: