2017-01-23 8 views
1

저는 C에서 상당히 익숙하며 구조체 배열에 연속 메모리를 할당하는 방법을 알아내는 데 어려움이 있습니다. 이 과제에서는 코드 껍질을 붙이고 나머지는 채워야합니다. 따라서 변수 이름이나 함수 프로토 타입을 변경할 수 없습니다. 이것은 내게 주어진 것입니다 :구조체 배열에 동적으로 메모리를 할당하는 방법

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

struct student { 
    int id; 
    int score; 
}; 

struct student *allocate() { 
    /* Allocate memory for ten students */ 
    /* return the pointer */ 
} 

int main() { 
    struct student *stud = allocate(); 

    return 0; 
} 

나는 그 의견이 allocate 함수에서 말하는 것을 어떻게 수행하는지에 대해 확신하지 못합니다.

struct student *allocate(void) { 
    /* Allocate and initialize memory for ten students */ 
    return calloc(10, sizeof(struct student)); 
} 

참고 :

+0

더 나은 코스를 얻으십시오. 기능 서명은 권장되지 않으며 향후 표준에서 제거됩니다. 프로토 타입 스타일 사용 (예 : 'int main (void)'. – Olaf

답변

6

할당 어레이를 초기화하는 간단한 방법이있다 malloc() 달리

  • calloc()

    는 모든 비트 제로 메모리 블록을 초기화한다. 따라서 배열의 모든 요소 중 idscore 필드는 0으로 초기화됩니다.
  • 학생들의 수를 함수 allocate()에 인수로 전달하는 것이 좋습니다.
  • 더 이상 필요없는 메모리는 free()에 할당 된 메모리에 좋은 스타일로 간주됩니다. 강사는 main()에서 돌아 오기 전에 free(stud);으로 전화해야한다고 암시하지 않았습니다. 엄격히 필요하지는 않지만 (프로그램에서 할당 한 모든 메모리는 프로그램 종료시 시스템에서 회수됩니다.) 취할 좋은 습관이며 찾기가 더 쉽습니다. 큰 프로그램에서는 메모리 누수가 발생합니다.
+0

강사가 의도적으로'free() '에 대한 호출을 생략했는지 궁금합니다 ... – stevieb

+1

@stevieb : 좋은 점,이 점에 대한 쪽지를 추가했습니다. – chqrlie

+0

'void * calloc (size_t nmemb, size_t size);에 대한 C 스펙 스타일을 따르기 위해'calloc (10, sizeof (struct student))'을 사용하십시오. – chux