【问题标题】:Program crash accessing dynamically allocated array from function in C程序崩溃从 C 中的函数访问动态分配的数组
【发布时间】:2016-11-17 02:53:19
【问题描述】:

感谢您花时间阅读本文。 一旦我尝试访问以前在函数中动态分配的数组,我的程序就会崩溃。这是一些代码

//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);
}

来自我的main

    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);
    }

我对编程还很陌生,所以我可能会遗漏一些实际上很明显的东西,请不要把任何事情视为理所当然

【问题讨论】:

标签: c arrays dynamic structure allocation


【解决方案1】:

在函数setup() 中修改复制的参数array 不会影响函数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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2014-03-16
    • 2012-02-23
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多