我需要动态分配大小为12MB的int
类型的数组。我这样做了:
unsigned int *memory;
memory = (int *) malloc( 3072 * sizeof(int));
如何在不使用3072
的情况下迭代数组?有没有办法获得数组的长度?或者我应该for (int i = 0; i < 3072; i++)
?
由于
答案 0 :(得分:3)
没有便携或方便的方法来确定分配块的大小。在完成malloc
之后,所有可见的是指向不确定的内存量(*)的指针。你必须自己做簿记。
(*)实际上malloc
和朋友做知道块的大小,但客户端没有标准的方法来访问这些信息。 < / p>
答案 1 :(得分:1)
C中的指针没有固有长度,因此无法做到这一点。在整个生命周期中,你必须保持与指针配对的长度。
答案 2 :(得分:0)
没有其他办法。你应该把3072放在一个const int中,这样可以使代码更好,更易于维护。
答案 3 :(得分:0)
使用MSVC和MinGW,您可以使用非便携式_msize函数,例如
char *c=malloc(1234);
printf("%lu",(unsigned long)_msize(c));
free(c);