Можно ли очистить массив от мусора, но оставить его элементы пустыми?
Допустим, есть массивы:
int * numArr1 = malloc (10*sizeof(int));
int * numArr2[10];
Сейчас там мусор. Я могу очистить мои массивы от мусора, заполнив их нулями(или любыми числами) так:
memset(numArr1, 0, 10*sizeof(int));
memset(numArr2, 0, 10*sizeof(int));
или с помощью calloc:
int * numArr1 = calloc (10*sizeof(int));
int * numArr2 = calloc (10*sizeof(int));
Или в цикле, но все эти способы предполагают заполнение массивов какими-то значениями сразу. Есть ли в СИ способ просто выделить блок памяти под массив, но оставить его пустым? (ну или хотя бы заполнить какой-то специальной константой которая не влияла бы на вычисления).
Ответы (2 шт):
У вас странное задание - "выделить блок памяти под массив, но оставить его пустым"
Что вы понимаете под "пустой"? Если вы выделили блок памяти - он уже не пустой, в нем всегда будут какие-то значения. Если вы хотите инициализировать массив нулевыми значениями - укажите это сразу:
int a[1000] = {};
или
int * a = new int[1000]{};
Система лишь находит место в памяти, которое можно отдать под использование программе. Что там лежит — неважно. Задача функции выделения памяти — выделить память. У нее нет задачи заполнять чем—то этот кусок памяти. Все эти циклы для заполнения нулем или calloc это всё не на уровне системы, а уже на уровне программы. Как было сказано выше, что значит оставить его пустым?