Что вы можете сделать, это использовать calloc
, что является лишь одним вызовом, более понятным для многих людей, хотя это и не очень важно, и использует кучу, что является самым большим преимуществом. Когда вы захотите создать действительно большой массив (или объекты или что-то еще), куча - это место для вас. В конечном счете использование стека для такого рода материалов нецелесообразно и, вероятно, вызовет ошибку stackoverflow. Кроме того, вы можете передать этот указатель, возвращенный с calloc
, на что угодно, чтобы беспокоиться о том, что произойдет с выделенной памятью. Это не похоже на стек, где он, вероятно, будет перезаписан, как только эта функция вернется, что-то, что случилось со мной много раз, создавая ошибки, которые трудно исправить. Тем не менее, есть минусы calloc
, как и тот факт, что он довольно медленный, но так же быстро, как и memset
. Но если вам не нужно, чтобы все биты были установлены в 0, вы могли бы использовать malloc
(гораздо быстрее и популярнее). Второй недостаток - calloc
или malloc
- то, что вы должны называть указатели free
, иначе вы пропустите память. Вот как использовать calloc
:
#include <stdlib.h> // or "#include <cstdlib>" in C++
/* Allocate space for array, set all bytes to 0,
and return pointer. Then assign to long_array.
*/
unsigned long* long_array = (unsigned long*) calloc(ARRAY_SIZE);
// When you're done with this variable:
free(long_array);
просто. И calloc
, и malloc
сделаны для такого рода вещей. Надеюсь, это помогло!
Примечания: Хотя эти ссылки на сайт C++, вы можете использовать эти функции в чистом C, включив в <stdlib.h>
код, вероятно, попадет ограничение размера стеки при попытке выделить этот «огромный» массив. – alk
Этот «* memset (long_array, 0, ARRAY_SIZE);« * »скорее всего не будет делать то, что вы ожидаете (но мало). – alk
Очень похожий вопрос был здесь как 10 минут назад ... –