Всем привет
Вот зашел в тупик. Как такое может быть:В стандартной библиотеке есть функция getpwuid, которая возвращает указатель на вот такую струкруру:
struct passwd {
char *pw_name; /* user name */
char *pw_passwd; /* user password */
....
};Насколько я понимаю под строки pw_name, pw_passwd функция должна выделить память (malloc(сколько-то)), и затем, после того как указатель на структуру мне больше не нужен, я должен эту память вернуть (free(my_pointer->pw_name); free(my_pointer->pw_passwd); ...). Однако, на деле получается, что не должен. Если вызываю free - valgrind ругается. Если не вызываю - все ок. Подскажите, где просчет?
>Насколько я понимаю под строки pw_name, pw_passwd функция должна выделить памятьНе обязательно. Эти указатели могут ссылаться на статически выделенную память. И судя по тому, что есть ещё ф-ция getpwuid_r() именно так и происходит -- возвращается указатель на области статической памяти.
>[оверквотинг удален]
>
>struct passwd {
> char *pw_name;
> /* user name */
> char *pw_passwd; /*
>user password */
>....
> };
>
>Насколько я понимаю под строки pw_name, pw_passwd функция должна выделить память (malloc(сколько-то)), и затем, после того как указатель на структуру мне больше не нужен, я должен эту память вернуть (free(my_pointer->pw_name); free(my_pointer->pw_passwd); ...). Однако, на деле получается, что не должен. Если вызываю free - valgrind ругается. Если не вызываю - все ок. Подскажите, где просчет?The return value may point to static area, and may be overwritten by subsequent calls to
getpwent(3), getpwnam(), or getpwuid().