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 应该发生段错误。但我以前这样做过,并没有造成问题。我应该怎么做才能改变它?
最佳答案
正如 Mohid 指出的那样,您正在malloc
一个结构组
,然后通过立即替换指针来泄漏它。
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);
}
}
关于c - 分段故障核心转储、指针和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291655/