有人能告诉我,为什么我不能通过init((函数为结构数组分配内存吗?当主要手动完成时,一切都很好。当通过init((尝试时,没有发生任何事情(也没有错误消息(。地址总是0x0,我猜是空指针。
#define GAMES 100
typedef struct{
double *scores;
}SCORES;
void init(SCORES *arr);
int main(){
SCORES *numbers = NULL;
init(numbers);
printf("Adress is: %pn", numbers); //Still 0x0
return 0;
}
void init(SCORES *arr){
arr = (SCORES*) malloc(GAMES * sizeof(SCORES));
}
使用下面的代码进行尝试对malloc有效。我得到一个地址,但如果我使用free((,内存仍然被分配。
void init(SCORES **arr){
*arr = (SCORES*) malloc(GAMES * sizeof(SCORES));
}
...
init(&numbers);
...
free(numbers);
在第一个代码片段中,您将传递numbers
变量的值。在函数中,您更改了一个局部变量,这样做对该变量没有影响。该变量是调用函数。
在第二个代码段中,您正确地传递了numbers
的地址,以便可以在函数中设置它,并且对free
的调用也是正确的。只是在释放numbers
之后不要尝试使用它的值,否则它是未定义的行为。