Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > проблема с new и delete в классе


Автор: Revares 20.9.2009, 13:38
Совершенно непонятная ошибка вылезает, на ровном месте:


Код

#include <iostream>
using namespace std;

class Array {

public:
        
    Array(int sz = 12) {
        int i = 0;
        _size = sz;
        this->pia = new int(_size);
        for(i = 0; i < _size; i++) {
            this->pia[i] = i;
        }
    }

    ~Array() {
        delete[] this->pia;
    }

    void print() {
        int i = 0;
        for(i = 0; i < _size; i++) {
            cout << this->pia[i] << " ";
        }
    }

private:

    int *pia;
    int _size;
    

};

int main() {
    Array a(15);
    cin.get();
}


Компилируется без проблем, запускаю:

Код

ОС Windows инициировала точку останова в test.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в test.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит test.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки


user posted image

Ну и программа вылетает естественно. Я предполагаю что ошибка связана с выделением памяти. Но где тут может быть ошибка?! Ведь все элементарно...

Можете объяснить что к чему?

Автор: Daevaorn 20.9.2009, 13:52
Цитата(Revares @  20.9.2009,  14:38 Найти цитируемый пост)
this->pia = new int(_size);

Цитата(Revares @  20.9.2009,  14:38 Найти цитируемый пост)
delete[] this->pia;

Почему вы память выделяете под 1 int, а освобождаете множество? Читайте умные книги.

Автор: ИванМ 20.9.2009, 14:04
Код

this->pia = new int(_size);

заменить на
Код

this->pia = new int[_size];

В вашем случае вы создаете одну переменную int и присваиваете ей значение _size

Автор: Revares 20.9.2009, 15:31
Спасибо Иван, действительно в этом и была моя ошибка. Теперь заработало!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)