Итерация динамически распределенного массива - PullRequest
0 голосов
/ 29 ноября 2011

Мне нужно динамически выделить массив типа int размером 12 МБ.Я сделал это следующим образом:

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

Как бы я перебрал массив, не используя 3072?Есть ли способ получить длину массива?Или я должен просто сделать for (int i = 0; i < 3072; i++)?

Спасибо

Ответы [ 4 ]

3 голосов
/ 29 ноября 2011

Нет портативного или удобного способа узнать, насколько велик блок выделения.После выполнения malloc все, что видно, - это указатель на неопределенный объем памяти (*).Вы должны вести бухгалтерию самостоятельно.


(*) На самом деле malloc и друзья do знают, насколько большой чанк, но для клиента нет стандартного способачтобы получить доступ к этой информации.

1 голос
/ 29 ноября 2011

Указатели в C не имеют внутренней длины, поэтому сделать это невозможно.Вы должны сохранять длину в паре с указателем в течение всего времени его жизни.

0 голосов
/ 30 ноября 2011

С MSVC и MinGW вы можете использовать непортативную функцию _msize, например

char *c=malloc(1234);
printf("%lu",(unsigned long)_msize(c));
free(c);
0 голосов
/ 29 ноября 2011

Другого пути нет.Вы должны поместить 3072 в const int, что сделает код лучше и удобнее в обслуживании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...