2014-03-03 57 views
2

我對C編程非常陌生,指針是我遇到很多麻煩的東西。我正在嘗試編寫一個程序,它以2個指針作爲參數,將第一個值添加到第二個值,然後返回第一個值。我寫的是這樣的:分割錯誤,指針問題?

int foo(int *g, int *h) 
{ 
    int a; 
    a = *g; 
    *h += a; 
    return a; 
} 

但是,我正在使用在線編譯器得到分段錯誤錯誤。我讀到這些是由無名指針造成的,但我不確定錯誤在哪裏。有人可以幫忙嗎?

編輯: 我調用這個函數是這樣的:

main() 
{ 
    int* x; 
    *x = 3; 
    int* y; 
    *y = 4; 
    int z = foo(x, y); 
    printf("%d", z); 
} 

我認爲這是聲明指針的方式,而且使用(*)取消對它的引用是如何給它賦值。我錯了嗎?

+0

確保在通話之前一切正常。 –

+3

你是怎麼調用這個函數的?向我們展示一個簡短的完整示例 – halex

回答

3

main你必須分配空間xy才能使用它。如果xy未分配空格,則它們指向任意的內存位置。如果它們在您的程序段之外,則會出現分段錯誤。

main() 
{ 
    int* x=malloc(sizeof(int)); 
    *x = 3; 
    int* y=malloc(sizeof(int)); 
    *y = 4; 
    int z = fun(x, y); 
    printf("%d", z); 
} 

或者這樣:

main() 
{ 
    int x=3,y=4; 
    int z = fun(&x, &y); 
    printf("%d", z); 
} 
+0

謝謝!我擔心這是foo代碼的一個問題,但事實證明,事實上,我是如何聲明變量的。你的第二個解決方案完美運作 –

0

這將導致一個段錯誤,因爲你解引用尚未初始化的指針。

int *x; // declares pointer X 
*x = 3; // seg fault here because x contains garbage and points certainly to 
      // invalid memory