2017-09-14 23 views
0

ここで私はユーザ入力ポイント間の距離を計算するコードを持っており、calculateDistance関数は2つのポインタを取る必要があります。 bash: line 12: 25372 Segmentation fault $file.o $argsポインタと構造体を使用して2点間の距離を計算するC++、セグメンテーションフォルトの問題

コード:

struct Point{ 
    float x; 
    float y; 
}; 

float calculateDistance(struct Point *p1, struct Point *p2){ 
    float *fx, *fy; 

    *fx = (*p1).x - (*p2).x; 
    *fy = (*p1).y - (*p2).y; 
    return sqrt((*fx * *fx) + (*fy * *fy)); 

} 

int main() 
{ 
    struct Point *p1, *p2, q, w; 
    p1 = &q; 
    p2 = &w; 
    //float distance; 

    cout << "Enter coordinate for p1x: " << endl; 
    cin >> (*p1).x; 
    cout << "Enter coordinate for p1y: " << endl; 
    cin >> (*p1).y; 

    cout << "Enter coordinate for p2x: " << endl; 
    cin >> (*p2).x; 
    cout << "Enter coordinate for p2y: " << endl; 
    cin >> (*p2).y; 

    //distance = calculateDistance(*p1, *p2); 

    cout << "Distance between points: " << calculateDistance(p1, p2) << endl; 
    return 0; 
} 
+2

というように変更してください。 –

+0

この '* fx * * fx'は悪いです。本当に悪いです。かっこを追加すると役立ちます。 – Ripi2

+0

これを練習に使っているのなら、私を無視してください。そうでない場合は、ポインタを使用せずにすべてを行うことができます。 – user4581301

答えて

0

一つの障害は機能calculateDistanceである私は、コードを実行したとき、私はこのエラーを取得します。 calculateDistance()関数でポインタ演算を行っているため、

float calculateDistance(struct Point *p1, struct Point *p2){ 
    float fx, fy; 

    fx = (*p1).x - (*p2).x; 
    fy = (*p1).y - (*p2).y; 
    return sqrt((fx * fx) + (fy * fy)); 
} 
+0

ありがとう、私はポインタを使い慣れていないし、それらを完全に理解していないので、fxとfyの変数に*が必要ない理由を簡単に説明できますか? – Dturley

+0

@Dturley 'float * fx、* fy'を宣言すると、ポインタは宣言されますが、メモリは値を格納するために割り当てられません。 'fx'と' fy'はローカルで使われていたので、それらをローカル変数として宣言することができました。別のオプションは 'float * fx = new float()'のような宣言を使用していました。しかし、使用後に削除する必要がありました。 – MKR

+0

それは意味があります、もう一度非常に感謝します。 – Dturley

関連する問題