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

C. malloc() and free() in function doesn't work

谁能告诉我,为什么我不能通过init()函数给struct数组分配内存?在 main 中手动完成时,一切都很好。通过 init() 尝试时没有任何反应(也没有错误消息)。地址总是0x0,我猜是空指针。

#define GAMES 100

typedef struct{
  double *scores;
}SCORES;

void init(SCORES *arr);

int main(){
  SCORES *numbers = NULL;
  init(numbers);

  printf("Adress is: %p\n", 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 变量的 value。在函数中你改变了一个局部变量,这样做对调用函数的变量没有影响。

在第二个片段中,您正确传递了 numbers 的地址,因此可以在函数中设置它,并且对 free 的调用也是正确的。释放后不要尝试使用 numbers 的值,否则它是 undefined behavior.