2014-10-14 3 views
0

나는 이것이 포인터와 참조를 제대로 이해하지 못한다는 것을 확신합니다! 함수 내부에 realloc이있는 배열을 확장하십시오 - 포인터?

그래서 내 C 파일의 시작에 내가 위한 구조체 정의의 내부에 그런

typedef struct { 
    char id[4]; 
    int age; 
    char name[128]; 
} people; 

를 주() 나는 구조체가 기록이라고 10 사람들의 배열을 만들 수 있습니다. 우리가 시작한 다음이 기능은

int MyFunction(people *record); 
와 함께) (주 전에 C 파일의 시작 부분에 프로토 타입 (

MyFunction(record); 

와 함수 속으로 다이빙 주에서

people* record = (people*)malloc(sizeof(people)* 10); 

()

내 안에 레코드을 늘리려는 것을 포함하여 MyFunction()의 내부에는 더 많은 것을 보관할 수 있도록 다양한 내용이 있습니다 사람들 구조체입니다. 나는

struct people *tmp = realloc(record, 20 * sizeof (people)); 
if (tmp) 
{ 
    record = tmp; 
} 

으로 기록 배열의 크기를 증가하려고 해요하지만 배열에 새로 추가 된 구조체를 사용하려고하면이 작동하지 않습니다 내가 메모리 손상을 얻을.

내가 말했듯이, 이것은 내가 포인터와 참조를 적절하게 이해하지 못해서 발생했다고 확신합니다. MyFunction()은 확장 된 레코드를 배열로 반환 할 수 없습니다. 왜냐하면 이미 다른 곳에서 리턴 int를 사용하고 있기 때문입니다. !) - 기본 레코드 배열을 사용해야합니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

+1

포인터의 주소가 아닌 레코드의 주소를 전달하고 있습니다. 호출 된 함수가 이미 레코드를 새로 할당 된 주소 범위로 이동 했더라도 호출 함수에는 이전 포인터에 할당 된 레코드의 이전 주소가 여전히 있습니다. – alvits

답변

1
int MyFunction(people **record);// MyFunction(&record);//call at main 
... 

struct people *tmp = realloc(*record, 20 * sizeof (people)); 
if (tmp) 
{ 
    *record = tmp; 
}