2010-06-08 3 views
0

C 프로그래밍에 익숙하지 않습니다. 누구든지 다음 프로그램에 무엇이 잘못되었는지 말해 주시겠습니까? process_list 0에 기록 된 패스로c 포인터를 가리키는 포인터 또는 함수를 가리키는 포인터

Person_t *p_list=0; 
... 
process_list(count, &p_list); 

코드를 한 다음, 당신은 :


typedef struct Person_s 
{ 
    int age; 
    char name[40]; 
} Person_t; 


int process_list(int *countReturned, Person_t **p_list) 
{ 

    Person_t *rowPtr=0; 
    //the actual program will fethc data from DB 

    int count =1; 

if(!((*p_list) = (Person_t *) malloc(sizeof(Person_t)))) 
{ 
    return -1; 
} 

rowPtr = *p_list; 

rowPtr[count-1].age =19; 
strcpy(rowPtr[count-1].name,"Prince Dastan"); 
*countReturned = count; 

    return 0; 
} 


int main(int argc, char *argv[]) 
{ 
     Person_t *tmpPerson=0; 
     Person_t **p_list=0; 
     int *count=0; 
     int i; 

     process_list(count,p_list); 

     tmpPerson = *p_list; 

     for(i=0; i< *count; i++) 
     { 
      printf("Name: %s , age: %d\n",tmpPerson->name,tmpPerson->age); 
      tmpPerson++; 
     } 

     //free(tmpPerson); 

    return 0; 
} 
+0

코드 검토를 원하십니까? 아니면 특정 오류가 있습니까? 그렇다면 문제는 무엇입니까? –

답변

1

당신은 주에해야

*0 = (Person_t *)malloc(...); 

이 될 0 원인 참조 취소되고 코드가 충돌합니다.

+0

'count * '가'int * count = 0'으로 선언 된'count'를 건네 주면 여전히 NULL을 역 참조하고 충돌합니다. – Chuck

0

기능을 입력 할 때 p_list의 값은 0입니다. 역 참조 0을 사용하면 버스 오류가 발생합니다.

if(!((*p_list) = (Person_t *) malloc(sizeof(Person_t)))) 

가 (C 문제의 90 %는 널 포인터를 역 참조에 의해 발생, 자바 문제가 단지와 같은 90 % :-). 잘못 구성된 클래스 경로에 의해 발생하는

3

귀하의 문제는 '당신이 즉 NULL (0)을 가리 키도록 포인터를 다시 설정 한 후 포인터를 역 참조하십시오. NULL을 역 참조 할 수 없습니다. 당신이 원하는 원하는 것은 더 같이있다 :

int main(int argc, char *argv[]) 
{ 
     Person_t tmpPerson; 
     Person_t *p_list=0; 
     int count; 
     int i; 

     process_list(&count, &p_list); 

     tmpPerson = *p_list; 
     // and so on... 

&는 변수의 주소에 대한 포인터를 반환 운영자, "주소의"입니다. 따라서 countp_list에 대한 포인터가 전달됩니다.이 함수는 사용자가 원하는 것으로 보이는 변수를 설정하는 데 사용합니다.

+0

process_list() 함수에서 count가있는 목록을 검색해야합니다. "Person_t * p_list = 0;" 이 목록을 반환 할 것인가? – Nazrul

+0

@ user361808 :'Pointer_t'의 배열을 가리키는 포인터를 반환합니다.이 배열은 실제로 테스트 코드에서와 같이 하나의 Pointer_t 일 수 있습니다. – Chuck

관련 문제