Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с new и delete в классе 
:(
    Опции темы
Revares
Дата 20.9.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 18.4.2008

Репутация: нет
Всего: нет



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


Код

#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

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

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

Это сообщение отредактировал(а) Revares - 20.9.2009, 13:42
PM MAIL   Вверх
Daevaorn
Дата 20.9.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



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

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

Почему вы память выделяете под 1 int, а освобождаете множество? Читайте умные книги.
PM MAIL WWW   Вверх
ИванМ
Дата 20.9.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



Код

this->pia = new int(_size);

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

this->pia = new int[_size];

В вашем случае вы создаете одну переменную int и присваиваете ей значение _size
PM MAIL   Вверх
Revares
Дата 20.9.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 18.4.2008

Репутация: нет
Всего: нет



Спасибо Иван, действительно в этом и была моя ошибка. Теперь заработало!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.