2014-06-16 56 views
0

這是一個關於malloc和scope的相當簡單的問題。從我對malloc的理解中,它允許你動態地爲變量分配內存等。不應該意味着變量保持可訪問狀態,直到內存被釋放爲止。我寫了幾行代碼,但是當我嘗試編譯時遇到了這個錯誤。爲什麼在使用malloc後指針不能在這個函數之外訪問?

錯誤消息: 「malloc.c:16:37:錯誤:使用未聲明的標識符的 'A'」

#include <stdio.h> 
#include <stdlib.h> 

int* createnum(int n) 
{ 
    int* a = malloc(sizeof(int)); 
    *a = n; 
    printf("%p\n", a); 
    printf("%d\n", *a); 
    return a; 
} 

int main(void) 
{ 
    createnum(1); 
    printf("The variable is %d\n", a); 

    return 0; 
} 
+0

這與'malloc'無關,只是作用域/名稱查找。 – ghostofstandardspast

回答

1

你說,

Shouldn't this mean that the variable remains accessible until the memory is freed?

即不正確的。如果從函數返回內存,但不是變量,則內存是可訪問的。該變量只能在createnum中訪問。

你想要的東西,如:

int* a = createnum(1); 

當然,你必須改變

printf("The variable is %d\n", a); 

printf("The variable is %d\n", *a); 

a類型int*,不int

1

就是這樣!

#include <stdio.h> 
    #include <stdlib.h> 

    int* createnum(int n) 
    { 
     int* a = malloc(sizeof(int)); 
     *a = n; 
     printf("%p\n", a); 
     printf("%d\n", *a); 
     return a; 
    } 

    int main(void) 
    { 
     int *p = createnum(1); 
     printf("The variable is %d\n", *p); 
     free(p); 
     return 0; 
    } 
+0

這個泄漏內存 –

+0

@MattMcNabb怎麼樣?我很好奇。 – Vagish

+0

@Vagish當我寫這個評論最初泄露內存時,可見的版本! –

相關問題