c ++通过共享指针为结构成员赋值导致SIGSEGV

c++ assigning value to struct member through shared pointer causes SIGSEGV

美好的一天。自从 90 年代后期以来就没有使用过 C++ 知识后,我正在更新我的 C++ 知识,并且正在跟上新事物的发展步伐。今天,我的问题是关于共享指针和结构。

这是我的代码:

#include <memory>

struct A {
    int x;
};

int main() {
  shared_ptr<struct A> y;
  y->x =0;

  return 0;
}

编译字符串:

g++ -Wall -Wpedantic --std=gnu++11 -g test.cpp -o test

valgrind memcheck 注意到第 11 行有一个 "Invalid write of size 4",即 y->x = 0

所以,我的问题是:为什么会出现无效写入?我的理解——显然是错误的——是 shared_ptr 习惯用法将处理它所指向的事物的内存分配和取消分配,实际上当我用它指向原始类型和 类 据我所知,但这种将它与结构一起使用的情况让我很困惑。

我想弄清楚的真正用例是使用智能指针来存储结构 sockaddr_in,但我认为在学习构建智能指针之前我应该​​(重新)学习爬行在智能指针被广泛接受之前定义的对象。

谢谢。

您仍然需要使用 newstd::make_shared

分配您的对象

使用这个:

std::shared_ptr<struct A> p = std::make_shared<struct A>();

Share_Ptr 是原始指针的包装器,它不为指针分配内存。

shared_ptr<struct A> y;

这是一个指针,它不指向(或拥有)任何对象。你不能取消引用它。

您需要创建一个由指针管理的对象,例如:

auto y = std::make_shared<A>();
std::shared_ptr<A> y {new A};

通常首选第一个,因为它可以更有效地分配内存。

您需要创建结构 A 的实例。然后用指针 y 指向它。