[英]C newbie malloc question
為什么不打印此圖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
的參數的情況下仍能正常工作?
您的指針( 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
}
從我看來,有2個錯誤:1)如果要更改指針的值,則需要將指針傳遞給函數int ** value的指針。 2)如果要在主機中打印指針的值,則需要取消引用* value。
在調用writevalue之前而不是在內部調用malloc(這樣您將獲得額外的好處,可以釋放它)。
您的程序不會打印5,但是還會丟失分配的塊的地址,從而導致內存泄漏。
其他人也解釋的原因是,參數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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.