程序崩溃从 C 中的函数访问动态分配的数组
Program crash accessing dynamically allocated array from function in C
感谢您花时间阅读本文。
一旦我尝试访问一个以前在函数中动态分配的数组,我的程序就会崩溃。这是一些代码
//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);
}
我对编程还很陌生,所以我可能会遗漏一些非常明显的东西,请不要想当然
对函数 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);
感谢您花时间阅读本文。 一旦我尝试访问一个以前在函数中动态分配的数组,我的程序就会崩溃。这是一些代码
//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);
}
我对编程还很陌生,所以我可能会遗漏一些非常明显的东西,请不要想当然
对函数 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);