为什么不打印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
}
我该如何修改它以便在仍然使用指针作为writeValue
的参数时才能工作?
答案 0 :(得分: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
}
答案 1 :(得分:0)
从我看到的内容中有2个错误: 1)如果要更改指针的值,则需要将指针传递给指向函数int **值的指针。 2)如果要在main中打印指针的值,则需要对其进行解引,* value。
答案 2 :(得分:0)
在调用writevalue之前调用malloc,而不是在它内部(因此你可以获得额外的好处,以便能够释放它)。
您的程序不会打印5,但是通过丢失已分配的bloc的地址也会导致内存泄漏。
其他人解释的原因是参数int * value
是main int * value
的副本。您可以将其视为函数的局部变量。您只能访问它指向的位置。修改函数中的值时,main中的其他值不会更改。
void writeValue(int* value) {
*value = 5;
}
int main(int argc, char * argv) {
int* value = NULL;
value = malloc(sizeof(int));
writeValue(value);
printf("value = %d\n", *value);
free(value);
}