分段故障核心转储、指针和结构
Segmentation fault core dump, Pointers and Structs
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
ing 一个 struct group
然后通过立即更换指针来泄漏它。
getgrgid()
returns 指向 已经存在的 条目的指针, 或 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);
}
}
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
ing 一个 struct group
然后通过立即更换指针来泄漏它。
getgrgid()
returns 指向 已经存在的 条目的指针, 或 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);
}
}