C新手malloc问题

rou*_*tic 2 c malloc pointers function

为什么不打印5

void writeValue(int* value) {
    value = malloc(sizeof(int));
    *value = 5;
}


int main(int argc, char * argv) {
    int* value = NULL;
    writeValue(value);
    printf("value = %d\n", *value); // error trying to access 0x00000000
}
Run Code Online (Sandbox Code Playgroud)

以及如何修改它以便它仍然可以使用指针作为参数writeValue

Yan*_*min 5

你的指针(int *value)是一个值.如果要保持上述行为,则需要指向指针的指针.

void writeValue(int** value) {
    *value = malloc(sizeof(int));
    **value = 5;
}


int main(int argc, char * argv) {
    int *value = NULL;
    writeValue(&value); // Address of the pointer value, creates int**
    printf("value = %d\n", *value); // prints 5
}
Run Code Online (Sandbox Code Playgroud)