The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Динамическое выделение памяти"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Динамическое выделение памяти"
Сообщение от Roman Искать по авторуВ закладки(??) on 09-Сен-04, 12:54  (MSK)
Уважаемые, подскажите новичку в чем проблема
Имеем FreeBSD 4.10 и вот такой скрипт:
while(nado)
{
  ptr = malloc(kolvo);
  sprintf(ptr...);
  free(ptr);
}
Так вот выделяется, но не освобождается !, синтаксис сто раз проверял,
если ставлю два free() подряд, то второй говорит что "данный сегмент
уже свободен", но в результате через 20 сек. работы память
всеравно заканчивается.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Динамическое выделение памяти"
Сообщение от Maxim A.Kuznetcov Искать по авторуВ закладки on 09-Сен-04, 14:08  (MSK)
>Уважаемые, подскажите новичку в чем проблема
>Имеем FreeBSD 4.10 и вот такой скрипт:
>while(nado)
>{
>  ptr = malloc(kolvo);
>  sprintf(ptr...);
>  free(ptr);
>}
>Так вот выделяется, но не освобождается !, синтаксис сто раз проверял,
>если ставлю два free() подряд, то второй говорит что "данный сегмент
>уже свободен", но в результате через 20 сек. работы память
>всеравно заканчивается.

видимо каким-то принтом вы пашете память за границей выделенного куска
скорее всего баг в sprintf - вместо него лучше ВСЕГДА ипользовать snprintf
в Вашем случае надо : snprintf(ptr,kolvo,...);


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Динамическое выделение памяти"
Сообщение от Roman Искать по авторуВ закладки(??) on 09-Сен-04, 14:23  (MSK)
Изначально о том и думал чтобы не запахать чего лишнего, иначе
с динамикой и возиться бы не стал
Вот полный код:

  char *buf;
  string temp;
  unsigned int count = 0;

  count = sprintf(NULL, "%d", param);
  buf = (char *) malloc(count * sizeof(char));
  if (!buf) { printf("NO AVAILABLE MEMORY !!!\n"); exit(1); }
  sprintf(buf, "%d", param);
  temp.append(buf, count);
  free(buf);

  return temp;

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Динамическое выделение памяти"
Сообщение от Roman Искать по авторуВ закладки(??) on 09-Сен-04, 14:56  (MSK)
Все, тема закрыта, спасибо натолкнули на мысль... ж)
оказывается sprintf в NULL это непросто в NULL,
а в память куда бог пошлет,
да еще и с попутным ее приватизированием... ;)
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру