2016-12-05 42 views
-1

我開始學習指針和我在一些麻煩與下面的代碼有:基本指針運動誤差

#include <stdio.h> 

int * g() 
{ 
    int a = 10; 
    return &a; 
} 

void main() 
{ 
    int *p; 
    p=g(); 
    printf("%d",*p); 
} 

它返回錯誤segmentation fault. core dumped

我真的apreciate任何幫助。祝你今天愉快!

回答

3

您正在返回本地變量的地址。當你離開這個函數時,你的代碼不再知道這個變量,從而導致分段錯誤。 您必須將此函數的指針作爲參數或爲堆中的此變量動態創建內存。

例如

void g(int* p) { 
    *p = 10; 
} 

int main() { 
    int a; 
    g(&a); 
    printf("%d", a); 
    return 0; 
} 

int* g() { 
    int* p = (int*) malloc(sizeof(int)); 
    *p = 10; 
    return p; 
} 

int main() { 
    int* p; 
    p = g(); 
    printf("%d", *p); 
    free(p) 
    return 0; 
} 
+1

是啊。 OP,你基本上想要拿一個死去的親戚的養老金,這是一種犯罪(「a」是相對的,功能的終點是死亡,「Segmentation fault」是法官對此事的看法。) – Amadan

+0

你也可以寫'int * g() {static} int int = 10; return&a; }' – Destructor