Stack Overflow на русском Asked by AleX_MAD on August 30, 2021
Задачка на динамическое выделение памяти.
при третьей итерации вываливается с ошибкой
Не могу понять в чем проблема.
Вызвано исключение: нарушение доступа для чтения.arr было 0x1118235.
#include <iostream>
using std::cin;
using std::cout;
int main()
{
setlocale(LC_ALL, "rus");
int a = 0;
int* arr = new int[1];
int* temp_arr;
int index = 0;
while (a>=0)
{
cout << "nВведите целое число: ";
cin >> a;
if (a<0)
{
break;
}
if (index == 0)
{
arr[index] = a;
cout << arr[index];
index++;
}
else
{
temp_arr = new int[index];
for (int i = 0; i < index; i++) //копируем массив
{
temp_arr[i] = arr[i];//Ошибка здесь, но не могу понять почему
}
delete[] arr;
int* arr = new int[index + 1];
for (int i = 0; i < index; i++) //копируем массив
{
arr[i] = temp_arr[i];
}
arr[index] = a;
delete[] temp_arr;
index++;
for (int i = 0; i < index; i++)
{
cout << arr[i] << " ";
}
}
}
delete[] arr;
}
int* arr = new int[index + 1];
ты создаёшь новый arr, вместо того, чтобы изменить старый.
должно быть
arr = new int[index + 1];
UPD.
вместо копирования из temp_arr, лучше присвой его arr
int* temp_arr = new int[index + 1];
for (int i = 0; i < index; ++i)
temp_arr[i] = arr[i];
temp_arr[index] = a;
arr = temp_arr;
А вместо первого цикла копирования можно использовать std::copy
std::copy(arr, arr + index, temp_arr);
Correct answer by Александр Старочкин on August 30, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP