2017-04-19 1 views
0

그래서, 내 구조체는 다음과 같이이다 :동적 메모리는

struct player{ 
char name[20]; 
int time; 
}s[50]; 

내가 구조체에 추가려고 얼마나 많은 선수 모른다, 나는이 동적 메모리를 사용할 수있다 . 그럼 내가 어떻게 할당하고 더 많은 공간을 재 할당 할 때 내가 구조체에 플레이어를 추가 할 수 있습니까? 저는 경험이없는 프로그래머입니다.하지만 오랫동안이 문제에 대해서 인터넷 검색을 해왔고 structs를 완벽하게 이해하지 못했습니다. 이 사이트는 내 질문에 동의하지 않으므로이 게시물에 더 많은 텍스트를 넣으십시오.

+0

"항목"의 "가변"수를 얻는 한 가지 해결책은 [연결 목록] (http://cslibrary.stanford.edu/103/LinkedListBasics.pdf)을 구현하는 것입니다. – rwols

+0

그게 가장 좋은 방법 이었을지 모르지만 나는이 프로그램으로 거의 끝났고, 필요한 것은이 프로그램과 mallocing을 결합하는 것뿐입니다. –

답변

0

C/C++로 프로그래밍한다고 가정합니다. 구조체 플레이어에 정적으로 할당 된 필드가 있으므로 malloc을 사용할 때 한 정수에 대해 20 바이트 char 배열을 요구합니다.

내 제안은 받아 들일 수있는 초기 구조 수를 변수에 저장하거나 기호를 정의하는 것입니다. 그런 다음 malloc을 사용하여 이러한 구조가 포함 된 정적 배열을 할당합니다. 또한 새로운 플레이어를 저장하는 전략에 대해 생각해야합니다. 가장 간단한 방법은 마지막 자유 위치를 저장하고 그 위치를 추가하는 데 사용할 색인 변수를 가질 수 있습니다.

간단한 예는 다음과 같습니다

#define init_cap 50 

struct player { 
    char name[20]; 
    int time; 
}; 

int main() { 
    int index; 

    struct player* players; 
    players = (struct player*) malloc(init_cap * sizeof(struct player)); 

    for(i = 0; i < init_cap; i++) { 
     strcpy(players[i].name, "peppe"); 
     players[i].time = i; 
    } 

    free(players); 

    return 0; 
} 

을 당신은 또한 플레이어의 수는 런타임은 초기 용량을 초과 얻는 경우에 메모리를 재 할당에 대해 생각해야이 시점에서. 초기 용량을 두 배로 늘리려면

players = (struct player*) realloc(2 * init_cap * sizeof(struct player)); 

을 사용할 수 있습니다.

결국, 요청한 메모리를 확보해야합니다.