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

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

Войти
Регистрация
Восстановить пароль
 
SasukeSagara
24 / 24 / 8
Регистрация: 01.07.2016
Сообщений: 99
#1

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

02.02.2017, 18:07. Просмотров 135. Ответов 4
Метки нет (Все метки)

Собственно, в чем суть:
C++
1
2
3
4
5
//инициализирую
  bool* delimeters = new bool[N];
...
//Удаляю
  delete [] delimeters;
Точки останова нигде не оставлял в коде.
Как доходит до удаления - выдает инфу о том, что "Приложением вызвана точка останова".
При нажатии кнопки "Продолжить" - работает корректно.
Скрины ниже.
Понять не могу в чем дело
0
Миниатюры
Ошибка при высвобождении ранее выделенной памяти под динам. массив   Ошибка при высвобождении ранее выделенной памяти под динам. массив  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2017, 18:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при высвобождении ранее выделенной памяти под динам. массив (C++):

Двумерный массив символов: при высвобождении памяти возникает ошибка - C++
Подскажите, что не так делаю. При высвобождении памяти выбивает ошибку.Как правильно сделать? char **str = new char*; for(int...

Освобождение памяти, выделенной под массив - C++
Выделяю память под массив: int (*array_1) = new int; как освободить то, что выделил? И еще вопрос: как указателю...

Косвенное обращение к методам. Освобождение памяти,выделенной под двумерный динамический массив - C++
Вопрос 1. В задании необходимо проиллюстрировать косвенный способ обращения к методам. Искал в интернете. Нашел : Array *s, obj(n,...

Ошибка при выделении памяти под двумерный массив - C++
#include <iostream> using namespace std; class array { int size1, size2; char **matr; public: array(int n1, int n2); ...

Ошибка при удалении динамически выделенной памяти - C++
Добрый день, хочу удалить выделенный массив, но выдает ошибку. Вот собственно код создаваемой функции. using namespace std; void...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб? - C++
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...

4
MrGluck
Модератор
Эксперт CЭксперт С++
7524 / 4662 / 704
Регистрация: 29.11.2010
Сообщений: 12,733
02.02.2017, 18:11 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Возможно, где-то идёт копирование указателя. Нужно смотреть весь код с участием данной переменной.

Добавлено через 2 минуты
И чтобы не наступать на такие грабли стоит использовать smart pointer-ы.
C++
1
std::unique_ptr<bool[]> delimeters(new bool[N]);
1
SasukeSagara
24 / 24 / 8
Регистрация: 01.07.2016
Сообщений: 99
02.02.2017, 18:19  [ТС] #3
MrGluck, Используется переменная только при установке значений её элементов:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
if (N%(i) == 0) {
            delimeters[i] = true;
            cout << i << endl;
        }
        else
        {
            delimeters[i] = false;
        }

И в условии:
Кликните здесь для просмотра всего текста
if (delimeters[i] && delimeters[j])

Весь код:
Кликните здесь для просмотра всего текста

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
53
54
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include <ctime>
#include <list>
#include <iostream>
using namespace std;
 
list<int> numbers_sums;
 
void main(int argc, char const *argv[])
{
    setlocale(LC_ALL, "Russian");           //setlocale(0, "");
    srand(time(0));
    int N;
    cout << "Введите натуральное число: ";
    cin >> N;
    bool* delimeters = new bool[N];
    cout << "Все делители числа " << N << " :\n";
    for (int i = 1; i < N+1; i++)
    {
        if (N%(i) == 0) {
            delimeters[i] = true;
            cout << i << endl;
        }
        else
        {
            delimeters[i] = false;
        }
    }
    cout << "Для наглядности - выведем делители и их суммы в виде таблицы\n";
    cout << "___________________________________________________________________________\n";
    cout << "|Первый делитель|\t\t|Второй делитель|\t\t|    Сумма" << endl;
    cout << "****************************************************************************\n";
    for (int i = 1; i < N+1; i++)
    {
        for (int j = 1; j < N+1; j++) {
            int k = i + j;
            if (delimeters[i] && delimeters[j])
            {
                cout << "|\t" << i << "\t|\t+\t|\t" << j << "\t|\t=\t|\t" << k << endl;
                if(k<=N)
                    numbers_sums.push_back(k);
            }
        }
    }
    cout << "****************************************************************************\n";
 
    cout << "Максимальное значение суммы делителей, не превышающее введенное число = " << numbers_sums.back() << endl;
    numbers_sums.pop_back();
    
    delete [] delimeters;
    system("pause");
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7524 / 4662 / 704
Регистрация: 29.11.2010
Сообщений: 12,733
02.02.2017, 18:22 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от SasukeSagara Посмотреть сообщение
C++
1
2
3
for (int i = 1; i < N+1; i++)
{
    for (int j = 1; j < N+1; j++)
Индексация массивов в С++ начинается с 0 и идёт до N - 1
1
SasukeSagara
24 / 24 / 8
Регистрация: 01.07.2016
Сообщений: 99
02.02.2017, 18:26  [ТС] #5
MrGluck, Вот дурак �� (Всм Я)
Невнимательность =)
Спасибо за ответ
0
02.02.2017, 18:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2017, 18:26
Привет! Вот еще темы с ответами:

Функция не видит выделенной памяти под глобальные переменные - C++
При решении задачи с алгоритмом поиска в глубину возникла проблема: описание переменных происходит над п/п алгоритма, выделение памяти под...

Обнулить кусок памяти (выделенной под указатели) по быстрому - C++
Есть хеш-таблица и есть кусок памяти под неё, нужно занулить изначально весь кусок памяти, но как можно быстрее, те хорошо бы использовать...

Массив: Освобождение выделенной памяти - C++
Сказали переделать код, нужно что бы память освобождалась не в отдельной функции а как то по другому так и не понял как. #include...

Ошибка с delete при удалении памяти из-под строки - C++
strngbad.h // strngbad.h -- flawed string class definition #include &lt;iostream&gt; #ifndef STRNGBAD_H_ #define STRNGBAD_H_ class...


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

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

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