Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 28.10.2018
Сообщений: 13
Builder 6

Освобождение памяти после использования трёхмерного массива

05.05.2019, 18:58. Показов 822. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Возникла трудность с удалением трехмерного массива... Моя запись:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//создание
    float ***M = new float **[3];
    for (int i = 0; i <= 2; i++) {
        M[i] = new float *[3];
        for (int j = 0; j <= 2; j++) {
            M[i][j] = new float [6];
        }
    }
...
//тело программы
...
//удаление
for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            delete[] M[i][j];
        }
        delete[] M[i];
    }
    delete[] M;
Выскакивает ошибка доступа, такая, как если бы я пытался записать значение в ячейку с индексом, больше максимального.
Квадратные скобки после "delete" удалял, дописывал отдельный цикл на "delete[] M[i]", не помогло. Единственное, помогло уменьшение максимального значения во вложенном цикле (который с "j"), но и тогда возникала ошибка в основном цикле (с "i") даже при том, что я и в основном цикле уменьшал пороговое значение переменной.

Что я делаю не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.05.2019, 18:58
Ответы с готовыми решениями:

Освобождение памяти после std:bind
Что имею: - CentOS - gcc 4.8 - valgrind Что делаю - С помощью valgrind устраняю утечки - Если приложение остановлено...

Освобождение памяти динамического массива
всем привет =) есть такой массив, создаю его динамически: AgrType **Points = new AgrType*; for (i = 0; i &lt; 3; i++) { Points =...

Освобождение памяти
//--------------------------------------------------------------------------- #ifndef Lariphm_H #define Lariphm_H /* *...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
05.05.2019, 19:09
В приведенном коде ничего не выскакивает, никаких ошибок. Надо смотреть, как используется массив.
1
0 / 0 / 0
Регистрация: 28.10.2018
Сообщений: 13
05.05.2019, 19:17  [ТС]
Этот массив используется в следующей функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
float Matrix_Aii_zv (int n,/*вот тут*/ float ***Mi, float **L, float ***Aii_zv)
{
    for (int i = 0; i <= 3; i++) {    // i - номер строки
        for (int j = 0; j <= 3; j++) {  // j - номер столбца
           if ((i < 3)&&(j < 3)) {  // пока строка и столбец меньше 4
            Aii_zv[i][j][n] = Mi[i][j][n]; // элементы Aii* = Mi
               }
           else if ((i == 3) && (j < 3)) { // если строка = 4 и столбец не 4
              Aii_zv[i][j][n] = 0.; // нули
                }
           else if ((i < 3) && (j == 3)) { //если строка не 4, а столбец - 4
              Aii_zv[i][j][n] = L[i][n]; // то элементы равны элементам вектора L
           }
           else {  // если строка и столбец 4-ые
           Aii_zv[i][j][n] = 1.; // то единица
           }
        }
    }
    return 0;
}
Грубо говоря, этот массив 3 на 3, часть массива 4 на 4.
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
05.05.2019, 20:42
Ramzes10,
Цитата Сообщение от Ramzes10 Посмотреть сообщение
for (int i = 0; i <= 3; i++) { // i - номер строки
сразу выход за предела массива. Должно быт i <= 2 или i < 3.
0
0 / 0 / 0
Регистрация: 28.10.2018
Сообщений: 13
05.05.2019, 21:06  [ТС]
Lelik-pahan, не-а, массив, формируемый данной функцией размерностью 4 на 4, здесь всё верно, ошибка выскакивает при удалении этих динамических массивов.
C++
1
2
3
4
5
6
7
for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            delete[] M[i][j]; /* вот тут ошибка*/
        }
        delete[] M[i];
    }
    delete[] M;
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
05.05.2019, 21:56
Ramzes10, может ошибка выскакивает и на этой строке, но причина где-то в другом месте, память рушится раньше. Как создаётся массив float ***Mi, который передаётся в Matrix_Aii_zv?
1
0 / 0 / 0
Регистрация: 28.10.2018
Сообщений: 13
06.05.2019, 10:02  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//создание
    float ***M = new float **[3];
    for (int i = 0; i <= 2; i++) {
        M[i] = new float *[3];
        for (int j = 0; j <= 2; j++) {
            M[i][j] = new float [6];
        }
    }
 
//инициализация
        M[0][0][0]=1.; M[0][1][0]=0.; M[0][2][0]=0.;
    M[1][0][0]=0.; M[1][1][0]=1.; M[1][2][0]=0.;
    M[2][0][0]=0.; M[2][1][0]=0.; M[2][2][0]=1.;
// ... и так далее до M[i][j][6] /*вот и косяк*/
ААААА, вот затупил!

Какой к чёрту M[i][j][6]! Я же объявил третий размер 6, значит у меня последний номер 5!

Спасибо за помощь!
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
06.05.2019, 11:34
Ramzes10, а первый размер 3, соответственно
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Сообщение от Ramzes10
for (int i = 0; i <= 3; i++) { // i - номер строки
сразу выход за предела массива. Должно быт i <= 2 или i < 3.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2019, 11:34
Помогаю со студенческими работами здесь

Автоматическое освобождение памяти
Вот небольшой тестовый примерчик. Это программа, выделяющая для работы 1ГБ памяти. *.h: ...

Удаление объекта (освобождение памяти)
Здравствуйте все! Имеется следующий код: TForm1* Form1 = new TForm1(); void* form = Form1; delete form; Вопрос: удаление...

Освобождение памяти контейнерами STL
Подскажите как это сделать в С++ Builder. Есть класс: class Test { public: int num; string str; ...

Освобождение памяти объекта потока
Приветствую всех. Подскажите, правильно ли я понимаю, что если создать поток (TThread) и установить его свойство FreeOnTerminated = true,...

Освобождение памяти для дерева
struct Node { char tfield; Node *son; Node *brother; Node *parent; }; написал так: ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru