Форум программистов, компьютерный форум CyberForum.ru

как освободить память? - C++

Восстановить пароль Регистрация
 
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
21.06.2013, 14:30     как освободить память? #1
Здравствуйте!!! Почему-то никак не освобождается память, выделенная оператором new под двумерный массив типа char,- как только идет освобождение, программа выдаем ошибку.

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
#include<iostream>
#include<cstring>
using namespace std;
 
const size_t AMOUNT_WORDS   = 2;        //максимальное кол-во слов
const size_t MAX_LENGHT_WORD    = 4;        //размер слова(в реале будет на 1 символ меньше)
 
 
int main()
{
     setlocale(LC_ALL, "Rus");
 
char **str2 = new char*[AMOUNT_WORDS];      //выделяем память 
    
    for(size_t i = 0; i < AMOUNT_WORDS; ++i)    //и еще раз
        str2[i] = new char [MAX_LENGHT_WORD];
 
    strcpy(str2[0], "123");         //инициализируем строки
    strcpy(str2[1], "456");
 
    for(size_t i = 0; i < AMOUNT_WORDS; ++i)    //выводим на экран
        cout << str2[i] << endl;
 
    //for(size_t i = 0; i < MAX_LENGHT_WORD; ++i)       //чистим память?????
    //  delete  [] str2[i];
 
    //delete [] str2;
 
    return 0;
}
Вроде все правильно очищаю... Вот так создается и очищается двумерный массив типа int, я вроде по аналогии сделал...


C++
1
2
3
4
5
6
7
8
9
10
11
    
 
int **mass = new int*[3];
 
    for(int i = 0; i != 3; ++i)
        mass[i] = new int [2];
 
    for(int i = 0; i != 2; ++i)
        delete [] mass[i];
 
    delete [] mass;
Или есть какие-то особые тонкости?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
21.06.2013, 14:31     как освободить память? #2
C++
1
2
3
4
5
6
7
8
9
void freematrix(int **Matrix, int Rows) {
    for (int i = 0; i < Rows; i++) {
 
        delete [] Matrix[i];
        Matrix[i] = NULL;
    }
    delete [] Matrix;
    Matrix = NULL;
}
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.06.2013, 14:42     как освободить память? #3
Цитата Сообщение от DPS Посмотреть сообщение
C++
1
2
3
//for(size_t i = 0; i < MAX_LENGHT_WORD; ++i) //чистим память?????  А вот тут цикл случаем не до AMOUNT_WORDS должен быть?
// delete [] str2[i]; 
//delete [] str2;
в коментах

Добавлено через 3 минуты
а то что у тебя получалось для инта получалось
Цитата Сообщение от DPS Посмотреть сообщение
C++
1
2
3
4
5
6
int **mass = new int*[3]; 
for(int i = 0; i != 3; ++i) 
mass[i] = new int [2]; 
for(int i = 0; i != 2; ++i) 
delete [] mass[i]; 
delete [] mass;
потому чтоты выделял на 3 элемента, а удалял на 2 элементоа, а для строки у тебя получилось что выделил на 2элемента (первое выделение памяти) а удаляешь на 4 элемента (до MAX_LENGTH_WORD)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.06.2013, 15:02     как освободить память? #4
C++
1
2
3
4
for(size_t i = 0; i <  AMOUNT_WORDS; ++i)  //чистим память
         delete  [] str2[i];
 
    delete [] str2;
Yandex
Объявления
21.06.2013, 15:02     как освободить память?
Ответ Создать тему
Опции темы

Текущее время: 02:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru