Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
C/C++ Unix
(Модератор:
Вад
) > Тема:
глюки gcc
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: глюки gcc (Прочитано 11746 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dron
Гость
глюки gcc
«
:
15-07-2005 14:16 »
Работая с выделением динамической памяти, наткнулся на такой глюк(либо я чего-то не допонимаю):
free(mass);
for(y=0;y<n;y++){
printf("%c",mass[y]);
}
вроде должно быть сообщение об ошибке, но он выводит то, что якобы удалилось! Как такое может быть?
Записан
npak
Команда клуба
Offline
Пол:
Re: глюки gcc
«
Ответ #1 :
15-07-2005 14:47 »
К gcc это отношения не имеет. Аллокация/освобождение памяти реализованы в стандартной библиотеке языка Си.
Данный случай означает, что освобождённая память не была возвращена ядру, и процесс по-прежнему имеет доступ к ней. Когда отдавать освобождённую память -- внутренняя особенность аллокатора.
Записан
UniTesK -- индустриальная технология надежного тестирования.
http://www.unitesk.com/ru/
dron
Гость
Re: глюки gcc
«
Ответ #2 :
15-07-2005 16:00 »
И как с этим бороться?
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: глюки gcc
«
Ответ #3 :
15-07-2005 16:19 »
dron, надо себя контролировать.
Типичным решением будет обнуление указателя при инициализации и при освобождении памяти.
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dron
Гость
Re: глюки gcc
«
Ответ #4 :
15-07-2005 16:55 »
Спасибо.
Я нашел ещё один выход:
mass=realloc(mass,0);
по эффекту тоже самое.
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: глюки gcc
«
Ответ #5 :
15-07-2005 19:01 »
Так ты только сложности создаешь.
Попробуй так:
Код:
#include <stdio.h>
#include <stdlib.h>
#define free(ptr) do { free(ptr); ptr = 0; } while (0)
int main()
{
char * p = malloc(10);
printf("Befor: %p\n",p);
free(p);
printf("After: %p\n",p);
return 0;
}
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dron
Гость
Re: глюки gcc
«
Ответ #6 :
16-07-2005 10:23 »
А в чём сложности? Можно поподробнее пожалуйста
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: глюки gcc
«
Ответ #7 :
16-07-2005 11:38 »
Вот она сложность: realloc(mass,0) вместо free(mass).
Eсли есть простые правила, так не к чему их усложнять - сам запутаешься и других запутаешь.
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dron
Гость
Re: глюки gcc
«
Ответ #8 :
16-07-2005 11:39 »
Ок. Спасибо.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
C/C++ Unix
(Модератор:
Вад
) > Тема:
глюки gcc
Загружается...