2013-05-26 74 views
-5

這裏請參考代碼中的註釋。分段錯誤(核心轉儲)發生在這裏的行* p = h。但是,當我在分開的另一個新的C文件單獨運行這條線是完全沒問題C(核心轉儲)中的分段錯誤 - 簡單的指針

#include<stdio.h> 
int *max(int *a,int *b) 
{ 
    if(*a>*b) 
    { 
     return a; 
    } 
    else 
    { 
     return b; 
    } 
} 

int main() 
{ 
    int h=1; 
    int *p; 
    int i=1,j=2,k=3; 
    int *a,*b,*c,*d; 

    c=max(&i,&j); 
    d=&i; 

    printf("\nOutput from the max function %d\n",*c); 
    printf("\n%d\n",*d); 

    *p=h; // Line where segmentation fault is occurring 

    printf("\n%d\n",*p); 

    return 0; 
} 
+4

'p'未初始化。 – BLUEPIXY

+3

它應該是'p =&h;'和'p = malloc(sizeof(int))之一; * p = h;' – A4L

+0

在這裏你不需要使用帶'p'的指針。只需將其聲明爲'int p;'並賦予'p = h'即可。 –

回答

2

指針p未初始化。它不指向任何存儲。

在這裏,你正試圖從h去參考p和存儲值:

*p = h;

p沒有指向任何有效的存儲空間來保存該值。

+0

此外'c = max(&i,&j);'是錯誤的,因爲'max'返回'int'和'c'是'int *' –

+3

不是最大函數返回int *' – Neopallium

+0

嗯,對,我誤解了它。 –