나는 이것이 포인터와 참조를 제대로 이해하지 못한다는 것을 확신합니다! 함수 내부에 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를 사용하고 있기 때문입니다. !) - 기본 레코드 배열을 사용해야합니다.
누구나 올바른 방향으로 나를 가리킬 수 있습니까?
포인터의 주소가 아닌 레코드의 주소를 전달하고 있습니다. 호출 된 함수가 이미 레코드를 새로 할당 된 주소 범위로 이동 했더라도 호출 함수에는 이전 포인터에 할당 된 레코드의 이전 주소가 여전히 있습니다. – alvits