0 / 0 / 0
Регистрация: 01.06.2020
Сообщений: 1
1

Ошибка при высвобождении памяти 2х мерного массива

01.06.2020, 17:31. Показов 2378. Ответов 4

Делаю программу генерации шума Перлина, столкнулся с ошибкой.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void PerlinNoise::init()
{
    std::mt19937 rand(seed);
    matrix = new Vector2f*[segmentCount * 2 + 1];
    float angle;
    for (int x = 0; x <= segmentCount * 2; x++)
    {
        matrix[x] = new Vector2f[segmentCount+1];
        for (int y = 0; y <= segmentCount+ 1; y++)
        {
            angle = static_cast<float>(0.0000000004656612873077392578125 * rand());
            matrix[x][y].x = std::sin(angle);
            matrix[x][y].y = std::cos(angle);
        }
    }
}
Эта функция вызывается в конструкторе (вызывается, проверял брейкпоинтом)
segmentCount = 2 (тоже проверял, не ноль, 2)
C++
1
2
3
4
5
6
7
8
PerlinNoise::~PerlinNoise()
{
    for (int x = 0; x <= segmentCount * 2; x++)
    {
        delete[] matrix[x];
    }
    delete[] matrix;
}
Возникает ошибка при выполнении delete[] matrix[x];(проверял брейкпоинтом, ломается при первом выполнении) больше не где не delete не вызывается вообще, ( не то что с matrix ) пробовал убрать
C++
1
2
3
4
    for (int x = 0; x <= segmentCount * 2; x++)
    {
        delete[] matrix[x];
    }
все заработало без ошибок.
Ошибка выглядит так:Название: ОШИБКА.png
Просмотров: 22

Размер: 27.7 Кб
Нормально так оставлять? Память не потеряю? и если потеряю, то что с ошибкой делать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2020, 17:31
Ответы с готовыми решениями:

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

Ошибка при высвобождении ранее выделенной памяти под динам. массив
Собственно, в чем суть: //инициализирую bool* delimeters = new bool; ... //Удаляю delete...

Постороить из 2 мерного массива в 1 мерный, который содержит все элементы 2 мерного массива , содержащихся по периметру массива
Постороить из 2 мерного массива в 1 мерный, который содержит все элементы 2 мерного массива ,...

Ошибка в работе 2-х мерного массива
Пользую visual 2012 ultimate. Есть проблема работы массива под таблицей. редактирование таблицы...

4
363 / 320 / 218
Регистрация: 21.02.2013
Сообщений: 752
01.06.2020, 17:57 2
Цитата Сообщение от TOXA_HABAP Посмотреть сообщение
matrix = new Vector2f*[segmentCount * 2 + 1];
зачем здесь +1 (в 4той строчке), и далее в программе этот лишний элемент не используешь?
0
Вездепух
Эксперт CЭксперт С++
10310 / 5600 / 1530
Регистрация: 18.10.2014
Сообщений: 13,671
01.06.2020, 18:03 3
Лучший ответ Сообщение было отмечено TOXA_HABAP как решение

Решение

Цитата Сообщение от TOXA_HABAP Посмотреть сообщение
C++
1
2
3
4
5
6
7
        matrix[x] = new Vector2f[segmentCount+1];
        for (int y = 0; y <= segmentCount+ 1; y++)
        {
            angle = static_cast<float>(0.0000000004656612873077392578125 * rand());
            matrix[x][y].x = std::sin(angle);
            matrix[x][y].y = std::cos(angle);
        }
Ну так тут очевидный вылет за пределы массива. Выделено segmentCount+1 элементов, затем запись делается по индексу y == segmentCount+1 - вот и вылет.
1
16272 / 8831 / 2166
Регистрация: 30.01.2014
Сообщений: 15,258
01.06.2020, 18:03 4
Лучший ответ Сообщение было отмечено TOXA_HABAP как решение

Решение

Цитата Сообщение от TOXA_HABAP Посмотреть сообщение
for (int y = 0; y <= segmentCount+ 1; y++)
C++
1
for (int y = 0; y <= segmentCount; y++)
1
Вездепух
Эксперт CЭксперт С++
10310 / 5600 / 1530
Регистрация: 18.10.2014
Сообщений: 13,671
01.06.2020, 18:03 5
Цитата Сообщение от jurok_85 Посмотреть сообщение
зачем здесь +1 (в 4той строчке), и далее в программе этот лишний элемент не используешь?
Неверно. Все элементы этого массива в коде используются.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2020, 18:03
Помогаю со студенческими работами здесь

Проблема при изменении размеров 2-мерного массива
Доброго времени суток всем. Option Base 1 Public AColWidthRes() As Double Sub Test() ...

Не меняется местами при четных значениях n 1-мерного массива
Всё вроде работает, при нечетных значениях всё меняется, последнее число меняется на ноль, что...

Какое событие происходит при высвобождении Control
Привет! У меня есть одна единственная модель и у нее много ее контролов, через которые она может...

Ошибка памяти при иниц. двумерного массива
делаю программу, вычитающие коды Хэмминга(цикл.). Встретился с одной непонятной мне проблеме:...

Ошибка памяти. Передача массива при наследовании
#include&lt;iostream&gt; using namespace std; class map { protected: char **my_map; public:...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru