迭代动态分配的数组

时间:2011-11-29 18:46:39

标签: c arrays malloc

我需要动态分配大小为12MB的int类型的数组。我这样做了:

unsigned int *memory;
memory = (int *) malloc( 3072 * sizeof(int));

如何在不使用3072的情况下迭代数组?有没有办法获得数组的长度?或者我应该for (int i = 0; i < 3072; i++)

由于

4 个答案:

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