Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
SasukeSagara
24 / 24 / 13
Регистрация: 01.07.2016
Сообщений: 99
#1

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

02.02.2017, 18:07. Просмотров 152. Ответов 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++):

Двумерный массив символов: при высвобождении памяти возникает ошибка
Подскажите, что не так делаю. При высвобождении памяти выбивает ошибку.Как...

Освобождение памяти, выделенной под массив
Выделяю память под массив: int (*array_1) = new int; как освободить...

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

Ошибка при выделении памяти под двумерный массив
#include <iostream> using namespace std; class array { int size1, size2;...

Ошибка при удалении динамически выделенной памяти
Добрый день, хочу удалить выделенный массив, но выдает ошибку. Вот собственно...

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

4
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,243
02.02.2017, 18:11 #2
Лучший ответ Сообщение было отмечено SasukeSagara как решение

Решение

Возможно, где-то идёт копирование указателя. Нужно смотреть весь код с участием данной переменной.

Добавлено через 2 минуты
И чтобы не наступать на такие грабли стоит использовать smart pointer-ы.
C++
1
std::unique_ptr<bool[]> delimeters(new bool[N]);
1
SasukeSagara
24 / 24 / 13
Регистрация: 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Эксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,243
02.02.2017, 18:22 #4
Лучший ответ Сообщение было отмечено SasukeSagara как решение

Решение

Цитата Сообщение от 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 / 13
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

Массив: Освобождение выделенной памяти
Сказали переделать код, нужно что бы память освобождалась не в отдельной...

Освобождение памяти, выделенной на динамический массив структур
Есть динамический массив структур. Как я понимаю, delete A не производит...


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

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

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