Уважаемые, подскажите новичку в чем проблема
Имеем FreeBSD 4.10 и вот такой скрипт:
while(nado)
{
ptr = malloc(kolvo);
sprintf(ptr...);
free(ptr);
}
Так вот выделяется, но не освобождается !, синтаксис сто раз проверял,
если ставлю два free() подряд, то второй говорит что "данный сегмент
уже свободен", но в результате через 20 сек. работы память
всеравно заканчивается.
>Уважаемые, подскажите новичку в чем проблема
>Имеем FreeBSD 4.10 и вот такой скрипт:
>while(nado)
>{
> ptr = malloc(kolvo);
> sprintf(ptr...);
> free(ptr);
>}
>Так вот выделяется, но не освобождается !, синтаксис сто раз проверял,
>если ставлю два free() подряд, то второй говорит что "данный сегмент
>уже свободен", но в результате через 20 сек. работы память
>всеравно заканчивается.
видимо каким-то принтом вы пашете память за границей выделенного куска
скорее всего баг в sprintf - вместо него лучше ВСЕГДА ипользовать snprintf
в Вашем случае надо : snprintf(ptr,kolvo,...);
Изначально о том и думал чтобы не запахать чего лишнего, иначе
с динамикой и возиться бы не стал
Вот полный код: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;
Все, тема закрыта, спасибо натолкнули на мысль... ж)
оказывается sprintf в NULL это непросто в NULL,
а в память куда бог пошлет,
да еще и с попутным ее приватизированием... ;)