프로젝트 중간에 있으며 malloc()
및 realloc()
을 사용하려고합니다. 내가 malloc 할 때 알아, 작동하지만 realloc 사용할 때 할당 된 메모리의 양을 전혀 변경하지 않습니다. 나는 항상 realloc이 이미 할당 된 메모리를 다시 할당 할지라도 항상 그랬다.메모리가 다시 할당되지 않습니다.
이 포함 : 내가 malloc에를 사용하는 구조체 (7)을 할 때 나는 것,
struct student {
int age;
int numOfClasses;
int gender; //0 male; 1 female
} student;
:
#include <stdlib.h>
내가 구조체가 여기에
내가 가진 무엇 다음 코드 줄을 사용하십시오.
student stud* = (structure*) malloc(7*sizeof(student));
이 줄이 작동합니다. 이 코드 줄은 구조체의 크기를 7로 곱합니다. 즉, 7 개의 구조체 배열을 만들기에 충분한 메모리를 확보하게됩니다. 다음은
: 나는 팔에 그 변경하려는 경우 A
이전 malloc으로 할당 된 메모리이며, B
새로운 malloc으로 할당 된 (또는 realloced) 메모리입니다
지금, 나는이 작업을 수행 할 것 나는 코드에서 얼마나 : 내가 아는 바로는
stud = (student*)realloc(stud, 8*sizeof(student));
는 realloc을 두 번째 매개 변수에 변수를 받아서 메모리의 양을 mallocs. 그런 다음 포인터 (또는 이전의 malloced)를 가져 와서 지정된 포인터에서 가능한 한 많이 메모리에 채 웁니다. 물론 두 번째 매개 변수는 이전의 malloced 크기보다 커야합니다. 그렇지 않으면 stud
은 결국 일부 메모리를 잃게됩니다. 이제 이것이 내 문제입니다. 위의 줄을 호출하면 아무 것도 변경되지 않습니다. malloced 배열은 여전히 길이가 7입니다. 나는 realloc할만한 충분한 메모리가 있음을 확신합니다.
내가이 일을 제대로하고 있습니까? 내 문제는 어디에있을 수 있습니까?
malloced 배열의 길이가 여전히 7이라고 생각하십니까? –
이것은 여러분의 문제와 관련이 없지만, 여러분의 구조가'enum'을 완벽하게 사용한다고 생각합니다. – teppic