TransWikia.com

нарушение доступа для чтения массива при динамическом выделении памяти

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;

}

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP