为什么这段代码会抛出SEGV?我有两个简单的结构,其中一个字段共享 ptr。我收到“SEGV 未知地址”。
struct B;
struct A {
shared_ptr<B> p;
};
struct B {
shared_ptr<A> p;
};
int main() {
shared_ptr<A> p1;
shared_ptr<B> p2;
p2->p = p1; // falls here
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这段代码会抛出SEGV?
因为默认初始化的共享指针指向空。并且您尝试通过此处的空指针访问不存在的对象:
p2->p = p1; // falls here
^
Run Code Online (Sandbox Code Playgroud)
你永远不会p2真正指出某个地方。这就像拥有
B* p2 = nullptr;
p2->p = p1;
Run Code Online (Sandbox Code Playgroud)
你需要p2在某个有效的地方表明观点:
auto p2 = std::make_shared<B>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |