簡體   English   中英

C新手Malloc問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM