質問: a,bの値を入れ替える以下のようなコードを組みました。 ``` #include void swap(int *i,int *j); int main(){ int a,b; a=6; b=8; printf("\nData before swap1 a=%d b=%d",a,b ); swap(&a,&b); printf("\nResult of swap1 a=%d b=%d",a,b); return 0; } void swap(int *a,int *b){ int *temp; *temp=*a; *a=*b; *b=*temp; return; } ``` これを実行するとsegmentation faultになりますが、なぜでしょうか? 個人的にはポインタtempを表示したあとに、何の値もいれずに通常変数(*p)として扱ったことに原因があると考えているのですが... ※プログラム8行目swap(a,b)をswap(&a,&b)に訂正しています
回答: ポインタにする必要ないと思うけど。 ポインタで定義しといて、渡すのは値でしょ? swap を呼び出すとき、a と b のアドレスを渡すようにするんですが、アドレス入れ替えるってのは考えられない。 アッセンブラでやるならできるけど。