次のコードでは、セグメンテーション違反が発生します。
Set *getpar() {...}
char function(...)
{
Set **S;
*S = getpar(); /* Segmentation Fault */
...
}
しかし奇妙なことに、ほとんど変更を加えなくてもセグメンテーション違反は発生しません。
Set *getpar() {...}
...
char function(...)
{
Set *S; // One less '*'
S = getpar(); // One less '*'
...
}
私が知っているように、「Set **S
」がある場合はオブジェクト*S
へのポインターであるSet
ため、2 番目のコードが正常に機能する場合、最初のコードはなぜ機能しないのでしょうか? *S
最初のコードは 2 番目のコードと同等ですがS
、正しくありませんか? どうすれば問題を解決できますか?