次のコードがセグメンテーションフォルトを引き起こすのはなぜですか?このようにしてユニオン内のポインタにアクセスすると、セグメンテーションフォルトが発生するのはなぜですか?
#include <string>
union U {
bool boolean;
double number;
std::string* str_ptr;
};
int main()
{
U u{new std::string("A")};
delete u.str_ptr;
return 0;
// return u.str_ptr->compare("A");
}
私は私が代わりにreturn文の他の方法でポインタにアクセスしようとした場合には関係していないようだと言う必要があります。例えば。 delete u.str_ptr; return 0;
をreturn u.str_ptr->compare("A");
に置き換えます。まだセグメント化エラーが発生します。
がケースでは、これは私はそれが労働組合でthe last member setでない限りu.str_ptr
にアクセスする法的ではありませんg++ (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609
不適切な言語の参照を引用しています。幸いにも、書かれている時点(C++ではhttp://en.cppreference.com/w/cpp/language/union)で同じ(存在しないモジューロの指定された初期化子)も真です。 –
あなたはリンクを変更しましたが、そのページには存在しない見積もりを... –