将shared_ptr(this)推入矢量会导致"free(): invalid pointer"错误
Pushing shared_ptr(this) into vector results in "free(): invalid pointer" error
我正在尝试实现一个可以将指向自身的智能指针推送到向量的类:
#include <memory>
#include <vector>
class A {
public:
void pushme(std::vector<std::shared_ptr<A>> & vec) {
vec.push_back(std::shared_ptr<A>(this));
}
};
int main() {
A test;
std::vector<std::shared_ptr<A>> vec;
test.pushme(vec);
return 0;
}
这编译得很好,但在执行时我收到一个free(): invalid pointer
错误。请帮助我了解这里发生了什么。
A test;
这将在函数本地作用域中声明一个对象。 当对象超出范围时,它会自动释放。
只有动态作用域中的对象(使用 new
创建(才能由 std::shared_ptr
管理。这就是std::shared_ptr
的全部目的——当指向对象的最后一个共享指针消失时,自动调用delete
。而且您只能delete
已分配new
的东西.
尝试enable_shared_from_this
:
class A : public std::enable_shared_from_this<A>{
public:
void pushme(std::vector<std::shared_ptr<A>> & vec) {
vec.push_back(shared_from_this());
}
};
int main()
{
std::shared_ptr<A> test = std::make_shared<A>();
std::vector<std::shared_ptr<A>> vec;
test->pushme(vec);
return 0;
}
相关文章:
- 逻辑'double free or corruption (fasttop)'错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- 为什么'allocate in one library and free in the other'是错误的
- 不断得到分段错误和free()无效指针
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- 结构作为参数的函数产生错误:free():无效指针:0x00007efd47b
- free() 中的错误:大小无效
- 如果在 C++ 中的 malloc() 之后调用 free() 则会出现错误
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- C 运行时错误:Free():下一个大小无效(快速)
- "double free or curruption " C++ 中的错误
- free():C++中的指针错误无效
- "./pw"中的错误:free():无效指针:0x0000000000602200***
- omnet++free():指针无效,错误134/139
- 在析构函数中检测到"Trying to free invalid pointer"错误
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- 在回溯中使用“delete”解除分配时,出现“free()”错误
- 我在使用删除 [] 运算符时收到 free() 错误
- Boost::Serialization:如何避免双保存指针?(并得到一个free.c错误)
- 强制coredump对glib free错误