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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
#1

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

21.06.2013, 14:30. Просмотров 340. Ответов 3
Метки нет (Все метки)

Здравствуйте!!! Почему-то никак не освобождается память, выделенная оператором 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;
Или есть какие-то особые тонкости?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 14:30     как освободить память?
Посмотрите здесь:

Как освободить память? - C++
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

Как правильно освободить память - C++
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором new? int *Arr = new int; ... delete...

Как правильно освободить память - C++
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo = *(localtime(&amp;seconds)); return...

Как правильно освободить память - C++
Здрасте! (Тема: Шаблоны функций.) Не могу правильно написать метод для освобождения памяти. В мейне делаю все необходимые мне...

Как освободить память быстро? - C++
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это связано,кто знает #include&lt;iostream&gt; ...

Как правильно освободить память - C++
Есть функция char* md5(const char*). Как освободить память выделенную ею? #include &lt;openssl\md5.h&gt; char* md5(const char* text) { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Belfegor
Ghost
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 526
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
642 / 563 / 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)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 15:02     как освободить память?
Еще ссылки по теме:

Как правильно освободить память деструктором? - C++
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический массив на 3 элемента, после чего память от...

Как освободить память в двумерном массиве в столбцах - C++
скажем так, чтобы освободить строку я пишу int **b; // // инициализирю массив delete b; // удаляю указатель(массив) в 3 позиции ...

Как освободить память из-под вектора объектов? - C++
vector&lt;TObj*&gt; obj; obj.push_back(new obj()); obj.erase(obj.begin()+indx);//удаляю указатель который указывал на объект &quot;Для...

Подскажите пожалуйста, как правильно освободить память - C++
Всем ку! Подскажите пожалуйста, как правильно удалить(освободить память) массива array2D. Array1D&lt;Elem&gt;* array2D = ...

Как освободить память после удаления объекта из вектора - C++
Всем доброго времени суток. Никак не могу понять как освободить память, после удаления объекта из вектора... std::vector&lt;TNetwork*&gt;...

Как освободить память занимаемую вектором и явно вернуть системе? - C++
Здравствуйте! Вопрос: Как освободить память занимаемую вектором и явно вернуть системе?


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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     как освободить память?
Ответ Создать тему
Опции темы

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