Какое значение по умолчанию инициализация с динамическим массивом присваивает его индексам? - PullRequest
0 голосов
/ 31 октября 2019

Моя программа требует, чтобы начальные значения в массиве были 0.

Мне нужно прочитать int из файла и затем создать массив этой длины

int array[no_read_from_file];

Однако, чтобы убедиться, что они инициализированы в 0, я делаю

int array[no_read_from_file]={0};

Но поскольку no_read_from_file не существует во время компиляции, возникает ошибка.

Как мне добиться желаемого поведения без использования циклов?

Кроме того, какая разница будет, если я буду использовать

int* ptr;
ptr=new int[no_read_from_file];

Являются ли инициализированные индексы значениями по умолчанию:0

Ответы [ 2 ]

1 голос
/ 31 октября 2019
ptr=new int[no_read_from_file];

Значение по умолчанию для инициализированных индексов - 0?

Нет. Это инициализация по умолчанию. Инициализированные по умолчанию целые числа имеют неопределенное значение.

То, что вы хотите сделать, это инициализация значения. Инициализированные значением целые числа имеют значение 0. Пример:

ptr=new int[no_read_from_file]();

Лучшее решение: избежать утечек памяти и других ошибок из-за неправильно обработанной памяти с помощью контейнера RAII:

std::vector<int> arr(no_read_from_file);
0 голосов
/ 31 октября 2019

Вы можете использовать std :: fill

#include <algorithm>

int* ptr;
ptr=new int[no_read_from_file];
std::fill(ptr, ptr + no_read_from_file, INIT_VALUE);

INIT_VALUE может быть 0 или любым другим желаемым значением.

...