2016-07-14 6 views
1

これを読んでいただきありがとうございます。 以前はダイナミックに関数に割り当てられていた配列にアクセスしようとするとすぐにプログラムがクラッシュしています。ここに私のmainC言語の関数から動的に割り当てられた配列にアクセスするプログラムクラッシュ

Player * array=NULL; 
    //I'm passing nPlayers because i want the value to be saved and available on my main 
    setup(array, &nPlayers); 

    for (i=0; i<nPlayers; i++){ 
     printf("It's %s 's turn\n", (array)[i].playerName); 
     dices=diceRoll(&same); 
    } 

からいくつかのコード

//function to allocate my array, gives an array as return 
Player* allocate(Player **a, int n) { 
    *a = (Player *) malloc(sizeof(Player)*(n)); 
    return *a; 
} 

//populating my allocated array, return an array 
Player* initializePlayers(Player *a, int n){ 
    int i=0; 
    char tmp[MAXCHAR]; 
    for(i=0; i<n; i++){ 
     printf("Insert player name %d\n", i); 
     scanf("%s", tmp); 
     strcpy(a[i].playerName,tmp); 
     printf("Player %s assigned.\n", a[i].playerName); 
     a[i].playerNumber=i; 
    } 
return a; 
} 

//setup function which includes both the above ones, called from main 
void setup(Player *array, int *nPlayers){ 
    int done=0; 
    while (done==0){ 
    printf("How many players?\n"); 
    scanf("%d", nPlayers); 
    if (*nPlayers <2 || *nPlayers>8){ 
     printf("Choose between 2 and 8\n"); 
      waitFor(2); 
      clear(); 
      done=0; 
     } 
    else done=1; 
    } 
    allocate(&array, *nPlayers); 
    initializePlayers(array, *nPlayers); 
} 

私は実際にはかなり明白である何かが足りないかもしれないので、私はプログラミングにかなり新しいよだ、付与された

+0

[、最小完全、かつ検証例]を投稿してくださいます(http:// stackoverflowの.com/help/mcve)に 'Player'の宣言を含む宣言と定義が必要です。 – MikeCAT

答えて

2
のために何を服用しないでください

コピーされた引数arrayの関数setup()の変更は、関数main()のローカル変数には影響しません。 Dereferencing NULL will invoke undefined behaviorとあなたのプログラムはちょうどが起きて、がクラッシュしました。

あなたsetup()は次のようにする必要があります:

void setup(Player **array, int *nPlayers){ 

    /* ... */ 

    allocate(array, *nPlayers); 
    initializePlayers(*array, *nPlayers); 
} 

、それはこのように呼ばれるべき:

Player * array=NULL; 
//I'm passing nPlayers because i want the value to be saved and available on my main 
setup(&array, &nPlayers); 
+0

おかげでたくさんの、頭がおかしくなった – Frans

関連する問題