Я пытаюсь динамически инициализировать массив целых чисел, поскольку размер массива изменяется в зависимости от ввода. Программа выглядит следующим образом:
int main()
{
int* list = createList("dis.bin");
for (int i = 0; i < sizeof(list) / sizeof(int); i++)
{
printf("%d\n", list[i]);
}
}
С функцией createList()
, как написано:
int* createList(const char* file_name)
{
int counter = 1;
int* inst{};
FILE* myFile = fopen(file_name, "rb");
if (myFile == nullptr)
{
printf("\nFile not opened\n");
return 0;
}
int x = 0;
for (int i = 0; !(feof(myFile)); i++)
{
fread(&x, sizeof(int), 1, myFile);
inst = new int[counter];
inst[i] = x;
printf("%08x #%-4d | Int equiv: %-12d | Bin equiv: %s\n", x, counter, inst[i], ToBinary(inst[i], 0));
counter += 1;
x = 0;
}
return inst;
}
createList
читает из файла .bin
(в основном содержащего массив байтов) и вставляет каждую пару из 4 байтов в элемент массива inst
. Я делаю это, выделяя новый объем пространства для массива на основе переменной counter
. (Таким образом, какой бы счетчик значений ни был, он становится размером массива с inst = new int[counter]
). Затем я устанавливаю содержимое массива по данному индексу i
равным x (считанная пара байтов), я бы предположил, что он работает правильно в createList
по крайней мере, из-за оператора printf
, который печатает каждый элемент в inst[]
.
Однако, когда я вызываю createList("dis.bin")
в основном и назначаю его переменной int* list
, я попробуйте перебрать каждое значение. Но это просто выводит одно неинициализированное значение (-842150451, если вам интересно). Так что я не уверен, что я здесь делаю не так?
Я должен упомянуть, что я НЕ использую векторы или какой-либо контейнер std. Я просто работаю с массивами. Я также использую printf
для определенных c причин.