Я повторно выполняю команду unix ls, но когда я проверяю на утечки, он говорит: Процесс 44151: 248 узлов неправильно для 45 КБ, Процесс 44151: 28 утечек для 560 общих утечек байтов. поэтому я попытался освободить pwd и grp. но он говорит, что я освобождаю память, которая никогда не выделялась.
static int one(const struct dirent *unused)
{
(void)unused;
return (1);
}
void ls_l(void)
{
struct stat statbuf;
struct group *grp;
struct passwd *pwd;
struct dirent **sd;
int n;
int i;
pwd = getpwuid((geteuid()));
n = scandir(".", &sd, one, alphasort);
i = 1;
while (i < n)
{
while (strncmp(sd[i]->d_name, ".", 1) == 0)
i++;
if (stat(sd[i]->d_name, &statbuf) == 0)
{
ft_perm(sd[i]->d_name);
ft_printf(" %-2d %4s ", statbuf.st_nlink, pwd->pw_name);
if ((grp = getgrgid(statbuf.st_gid)) != NULL)
ft_printf(" %-8.8s %5d %s %s\n",grp->gr_name,
(int)statbuf.st_size,ft_group(ctime(&statbuf.st_mtime)),
sd[i]->d_name);
else
ft_printf(" %-8d %5d %s %s\n", statbuf.st_gid,
(int)statbuf.st_size,ft_group(ctime(&statbuf.st_mtime)),
sd[i]->d_name);
}
free(sd[i]);
i++;
}
free(sd);
}