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.
谁能告诉我,为什么我不能通过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.