【发布时间】:2017-03-02 06:53:29
【问题描述】:
为什么下面的代码会导致分段错误?
#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"); 我仍然遇到分段错误。
如果这是特定于编译器的,我使用的是g++ (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609
【问题讨论】: