Почему эта программа не выходит, как ожидалось. В Visual Studio достигается точка останова. В программе используется указатель Dynami c - PullRequest
0 голосов
/ 26 марта 2020

Я изучаю динамические c распределение памяти в CPP с использованием указателей. Код работает как положено, но не завершается так, как я хочу. Код сталкивается с ошибкой в ​​Visual Studio. Вот снимок ошибки.

Кроме того, деструктор уничтожает указатель, но все еще не выводит соответствующий вывод. Я не могу понять причину сбоя кода.

enter image description here

#include <iostream>

using namespace std;

class MyClass
{
public:
    int* ptrDynamic = new int(5);
    void showAddress()
    {
        cout << "Address of the Pointer: " << &ptrDynamic << endl;
        for (int i = 0; i < 5; i++)
        {
            cout << "Address of " << i + 1 << "element:  " << &ptrDynamic[i] << endl;
            // Alternate method of showing address
            cout << "Address of " << i + 1 << "element:  " << ptrDynamic + i << endl;
            cout << endl << endl;
        }
    }

    void inputData()
    {
        for (int i = 0; i < 5; i++)
        {
            cout << "Enter Data at Index " << i + 1 << ":   ";
            //cin >> ptrDynamic[i]; Alternate method of accessing DMA index
            cin >> *(ptrDynamic + i);
        }
    }

    void showData()
    {
        for (int i = 0; i < 5; i++)
        {
            //cout << ptrDynamic[i] << endl;  Alternate method of accessing DMAint
            cout << *(ptrDynamic + i)<<endl;
        }
    }

    ~MyClass()
    {
        delete ptrDynamic;
    }
private:
};

int main()
{
    MyClass object{};
    object.showAddress();
    object.inputData();
    object.showData();

    getchar();  // Pausing the console to exit until an input is received.
    return 0;
}

1 Ответ

3 голосов
/ 26 марта 2020

В самом верху класса это должно быть

int* ptrDynamic = new int[5];

, а не

int* ptrDynamic = new int(5);

Квадратные скобки означают выделение массива из 5 элементов. Круглые скобки означают выделение одного целого числа со значением 5.

Кроме того, удаление должно быть

delete [] ptrDynamic;

, чтобы освободить весь массив, а не только один объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...