2015-02-03 2 views
0
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의 세그먼트 오류가 발생해야합니다. 그러나 이전에 이런 일을 해본 결과 아무런 문제가 발생하지 않았습니다. 그것을 바꾸려면 어떻게해야합니까?세그먼트 오류 코어 덤프, 포인터 및 구조체

+2

은 null이 아닌 문자입니까? 왜 처음에 malloc을하고,'struct group * g = getgrgid (gid);'를 사용하여'g! = NULL'을 확인하십시오. –

답변

0

Mohid가 지적했듯이를 입력하고 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); 
     } 
} 
관련 문제