函数中的 C. malloc() 和 free() 不起作用



有人能告诉我,为什么我不能通过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之后不要尝试使用它的值,否则它是未定义的行为。

最新更新