Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rahmat
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 6
#1

Ошибка при освобождении памяти - C++

24.10.2014, 11:33. Просмотров 281. Ответов 9
Метки нет (Все метки)

Здравствуйте! Пишу на MS Visual C++ 2010, windows 7.
При вызове функции resize() на строке
C++
1
delete [] arr;
происходит ошибка, аварийный останов.
Что я делаю неправильно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <cstddef>
 
class ArrInt {
public:
    explicit ArrInt() {
        size_ = 10;
        arr = new int[size_];
        for(size_t i=0; i<=size_; ++i)
            arr[i] = i;
    }
 
    ArrInt(int n) {
        size_ = n;
        arr = new int[size_];
        for(size_t i=0; i<=size_; ++i)
            arr[i] = i;
    }
 
    ~ArrInt() {
        //cout<<"destructor"<<endl;
        //delete [] arr; 
        //arr = 0;
    }
 
    void print() const {
        for(size_t i=0; i<size_; ++i)
            cout<<arr[i]<<endl;
    }
 
    void resize() {
        size_ *= 2;
        delete [] arr;
        arr = new int[size_];
        for(size_t i=0; i<=size_; ++i)
            arr[i] = i;
    }
 
private:
    int *arr;
    size_t size_;
};
 
int main() {
    ArrInt a1;
    a1.print();
    a1.resize();
    a1.print();
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2014, 11:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при освобождении памяти (C++):

Ошибка при освобождении памяти - C++
#include &lt;iostream&gt; using namespace std; #include &lt;stdlib.h&gt; #include &lt;fstream&gt; #include &lt;stdio.h&gt; void *malloc (size_t...

Ошибка при освобождении памяти - C++
Задача: Из стандартного входного потока вводятся сроки. Признаком завершения каждой сроки является символ ‘\n’. Признаком конца текста...

Ошибка при освобождении памяти - C++
Здравствуйте. Знаю, что тема уже много раз поднималась в самых разнообразных местах и с очень отличающимися примерами, но, увы, я тоже с...

Ошибка при освобождении памяти - C++
Здравствуйте, программа завершает работу в этом коде #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cmath&gt; int main() { ...

Ошибка при освобождении памяти? - C++
Доброго времени суток! Я только-только взялся за изучение c++. Дошел до динамической памяти (разбираю по учебнику) и столкнулся с...

Ошибка при освобождении памяти - C++
Все идет замечательно, но вот когда происходит удаление массива программа крашится.. #include &lt;iostream&gt; using namespace std; ...

9
MakItSim
17 / 17 / 9
Регистрация: 23.09.2014
Сообщений: 117
24.10.2014, 11:41 #2
Цитата Сообщение от Rahmat Посмотреть сообщение
i<=size_
просто <
Везде
0
Kuzia domovenok
2130 / 1959 / 197
Регистрация: 25.03.2012
Сообщений: 6,825
Записей в блоге: 1
24.10.2014, 11:42 #3
выход за пределы массива
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4306 / 2325 / 574
Регистрация: 18.10.2014
Сообщений: 3,964
24.10.2014, 11:42 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
arr = new int[size_];
for(size_t i=0; i<=size_; ++i)
   arr[i] = i;
Если массив был выделен с размером 'size_', то разрешенными индексами являются индексы от '0' до 'size_-1'. У вас же в коде происходит запись через индекс 'size_', т.е. за пределами выделенного массива. Это приводит к нарушению целостности динамической памяти и падению во время 'delete []'.
1
Kuzia domovenok
2130 / 1959 / 197
Регистрация: 25.03.2012
Сообщений: 6,825
Записей в блоге: 1
24.10.2014, 11:43 #5
Цитата Сообщение от Rahmat Посмотреть сообщение
C++
1
for(size_t i=0; i<=size_; ++i)
C++
1
for(size_t i=0; i<size_; ++i)
0
ValeryS
Модератор
7011 / 5349 / 527
Регистрация: 14.02.2011
Сообщений: 18,048
24.10.2014, 11:45 #6
а зачем ты добавил к конструктору без параметров explicit?
если создать класс так
C++
1
ArrInt a1(10);
будет ошибка?

Добавлено через 54 секунды
действительно выход за пределы, как то я просмотрел
0
Rahmat
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 6
24.10.2014, 11:57  [ТС] #7
Надо было ставить < (строго меньше). Проглядел. Спасибо всем! Вопрос закрыт.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4306 / 2325 / 574
Регистрация: 18.10.2014
Сообщений: 3,964
24.10.2014, 12:01 #8
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем ты добавил к конструктору без параметров explicit?
'explicit' на конструкторе без параметров никакого эффекта не имеет. Это не ошибка, но смысла в этом нет никакого.
0
ValeryS
Модератор
7011 / 5349 / 527
Регистрация: 14.02.2011
Сообщений: 18,048
24.10.2014, 12:16 #9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это не ошибка, но смысла в этом нет никакого.
вот про это я и спросил
причем на конструкторе с параметрами его нет
0
Rahmat
0 / 0 / 0
Регистрация: 24.10.2014
Сообщений: 6
24.10.2014, 12:33  [ТС] #10
Учту!
0
24.10.2014, 12:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2014, 12:33
Привет! Вот еще темы с ответами:

Ошибка при освобождении памяти - C++
Добрый День! Написал простую программу для понимания сути. Проблема в том, что код, который прилагается выдает ошибку. Но если убрать...

Ошибка при освобождении памяти - C++
#include &lt;iostream&gt; using namespace std; template&lt;class T&gt; class pvector { T **p; int sz; public:

Ошибка при освобождении памяти (delete) - C++
Здравствуйте! Есть массив lines, созданный вот так : int *line = new int ; Потом, пытаюсь его удалить и пересоздать : delete...

Ошибка при освобождении памяти массива char* - C++
Класс должен читать слова из файла (C:\\IN.TXT) по одному, и выводить на экран. Почему появляется ошибка в строке 56, и в конце...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru