void group(char *chars, int v)
{
int gid = atoi(chars);
struct group *g = malloc(sizeof(struct group));
g = getgrgid(gid);
printf("file group: %s (gid: %d\n", g->gr_name, gid);
return;
}
应该为g-> gr_name发生分段错误。但我以前做过这件事,并没有造成问题。我应该怎么做才能改变它?
答案 0 :(得分:0)
正如Mohid指出的那样,你malloc
struct group
然后通过立即更换指针来泄漏它。
getgrgid()
会返回指向已存在条目的指针,或 NULL
如果未找到任何条目,或发生错误。您需要检查错误情况。至少,像:
void group(char *chars, int v)
{
int gid = atoi(chars);
struct group *g = getgrgid(gid);
if (g)
{
printf("file group: %s (gid: %d)\n", g->gr_name, gid);
}
else if (errno)
{
printf("error checking gid (gid: %d)\n", gid);
}
else
{
printf("no entry for gid: %d\n", gid);
}
}