0

C の「call-by-value」と「call-by-reference」の違いを比較するチュートリアルを見ながらこのプログラムを書きましたが、次のエラーが表示されます。

コマンドを実行: 1 行目: 1508 セグメンテーション違反: 11 ./"$2" "${@:3}"

ヘルプ?

main() 
{
int a,b;
scanf("%d %d", &a, &b);
printf("Before Call %d %d", a,b);
exch_1(a,b);
printf("After first call %d %d", a,b);
exch_2(a,b);
printf("After second Call %d %d \n", a,b);  

}

exch_1(i,j)
int i, j;
{
    int temp;
    temp = i;
    i = j;
    j = temp;
}

exch_2(i,j)
int *i, *j;
{
    int temp;
    temp = *i;
    *i = *j;
    *j = temp;
}
4

2 に答える 2

5

アドレスがパラメーターとしてexch_2期待されるように、それを呼び出す必要がありますexch_2(&a,&b);

値を渡していますが、これらはアドレスとして取得されます。たとえばa、値が の5場合、コンピューターはコンピューター上のアドレスの値を使用しようとしますが、5これはおそらくプログラムからアクセスできません。

于 2013-08-10T01:15:21.187 に答える