Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
VeNick
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 5
#1

free - C++

04.11.2013, 11:55. Просмотров 555. Ответов 5
Метки нет (Все метки)

Выделил память под массив(строку), размером 5 элементов.
C++
1
2
3
4
5
6
7
    char *str;
    str = (char*)calloc(5,sizeof(char));
    if (str == NULL)
    {
        cout<<"ERROR"<<endl;
        exit(1);
    }
По мере ввода строки, выделяется дополнительная память.
realloc может возвратить указатель на новую область памяти, поэтому старую нужно очистить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    int i;
    char simvol;
    char *strold;
    for (i = 0; (simvol = getchar()) != '\n'; i++)
    {
        if (i%5 == 0  && i != 0)
            {
                strold = str;
                str = (char*)realloc(str, (i+5)*sizeof(char));
                if (str == NULL)
                {
                    cout<<"ERROR"<<endl;
                    exit(1);        
                }
                if(strold != str)
                    free(strold);
            }
        str[i] = simvol;
    }
С помощью отладочных печатей, обнаружил, что ошибка возникает в строчке
C++
1
free(strold);
Что-то там про кучу...
Помогите разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 11:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос free (C++):

C-Free Standart - C++
Для формулы: Y=1.7*x+7.8*sin(2.1*x)+3.4*(х-1)-7.2 , A=-3,B=3,H=0.1. Составить программу построения таблицы значений функции при изменении...

Компилятор C-Free - C++
Начинаю изучать язык программирования C++. Какой вы можете дать отзыв о вышеупомянутом компиляторе? Стоит ли его использовать? Если нет, то...

ошибка с free - C++
#define _CRTDBG_MAP_ALLOC #include &lt;stdlib.h&gt; #include &lt;crtdbg.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; ...

free и метки - C++
Здравствуйте, господа. Никак не могу найти ответы на след. вопросы: 1). Для того, чтобы освободить выделенную ранее память,...

calloc, free. - C++
как правильно выделить память для двумерного массива а, при m=5,n=10 используя функцию calloc. и как правильно ее освободить при помощи...

с free в delete - C++
Как эту функцию можно переписать с помощью delete? void A(int **p,int r){ int **pr; for(pr = p; pr &lt; pr + r; tr++) ...

5
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
04.11.2013, 12:05 #2
realloc может возвратить указатель на новую область памяти, поэтому старую нужно очистить.
Не нужно очищать в этом случае; нужно освобождать память только после того, как она уже не нужна.
1
VeNick
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 5
04.11.2013, 12:15  [ТС] #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Не нужно очищать в этом случае; нужно освобождать память только после того, как она уже не нужна.
Но если данные в этой области памяти не имеют смысла, потому что в указателе лежит уже другой адрес, почему бы не освободить там память? Видимо, я просто чего-то элементарного не понимаю.
0
grizlik78
Эксперт С++
1967 / 1460 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
04.11.2013, 12:23 #4
Цитата Сообщение от VeNick Посмотреть сообщение
Но если данные в этой области памяти не имеют смысла, потому что в указателе лежит уже другой адрес, почему бы не освободить там память?
Потому, что realloc эту память уже освободил.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.11.2013, 12:29 #5
Цитата Сообщение от VeNick Посмотреть сообщение
realloc может возвратить указатель на новую область памяти, поэтому старую нужно очистить.
Вторая часть предложения ошибочна.
If the new size of the memory object would require movement of the object, the space for the previous instantiation of the object is freed.
1
VeNick
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 5
04.11.2013, 12:30  [ТС] #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Потому, что realloc эту память уже освободил.
Понятно, спасибо.
0
04.11.2013, 12:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 12:30
Привет! Вот еще темы с ответами:

Free - не удаляется память - C++
free(Items.info);//для последнего элемента память не уудаляется - костыль!!!!!!!!!!!!!!! делал лабу на СИ, пришлось соответственно...

Работа с calloc и free в C++ - C++
Всем добрый день!! Уважаемые программисты посмотрите пожалуйста, корректно ли я использую эти функции для динамического выделения памяти,...

lock-free vector - C++
Собственно вопрос, есть ли реализации lock free вектора?

Освобождение памяти malloc free - C++
В общем работаю над расширением для php (для тренировки в php и в c++ сразу) Суть дела вот в чем, наткнулся на конвертер php массива в...


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

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

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