似乎微不足道,但我无法理解为什么这不起作用。
int main(void){
int *k = NULL;
foo(k);
printf("%p\n", k);
printf("%d\n", *k);
return 0;
}
void foo(int *i){
i = malloc(sizeof(int));
if (i == NULL){
printf("memory fail\n");
}else {
*i = 10;
}
}
输出:
(nil)
Segmentation fault (core dumped)
我猜这是因为我传入NULL而不是k
的地址,但不确定如何传递k
的地址。
答案 0 :(得分:7)
您正在按值传递指针。因此指针的分配值不会返回给调用者。改为使用双重间接。例如,
void foo(int **i){
*i = (int *) malloc(sizeof(int));
if (*i == NULL){
printf("memory fail\n");
}else {
**i = 10;
}
}
int main(void){
int *k = NULL;
foo(&k);
printf("%p\n", k);
printf("%d\n", *k);
return 0;
}
这将使k的地址作为值传递,并且由于双重间接而得到k。