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

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

05.05.2019, 18:58. Показов 806. Ответов 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
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,880
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru