如何解决为什么我得到 free(): 程序结束后指针无效错误
有人能解释为什么我在程序结束后收到这个错误吗?
free(): 无效指针
这是我的代码:
#include <iostream>
#include <memory>
int main()
{
int a = 3;
std::unique_ptr<int> up(&a);
std::cout << a << std::endl;
std::cout << *up << std::endl;
std::cout << &a << std::endl;
std::cout << up.get() << std::endl;
return 0;
}
解决方法
std::unique_ptr<int> up(&a);
std::unique_ptr
的全部和全部目的,它存在的唯一原因,是当它超出范围并被销毁时,它会自动 delete
是它指向的任何东西(假设它已经'没有被移出)。
a
是在函数局部作用域中实例化的,而不是动态作用域,因此尝试 delete
未new
的内容会导致未定义的行为和崩溃。>
这是一个独特指针的玩具模型:
struct toy_ptr {
int* p;
~toy_ptr() { delete p; }
};
(“玩具”因为需要更多,而这只是重现您的问题所需要的)
现在如果你这样做:
int main() {
int a = 0;
toy_ptr ptr{&a};
}
toy_ptr
拥有 a
的所有权。拥有一个对象意味着:toy_ptr
负责在其析构函数中删除它。 a
未通过 new
分配,因此尝试通过 delete &a
删除它会调用未定义的行为。
unique_ptr
不是 toy_ptr
,但它也拥有传递给构造函数的指针的所有权,并尝试在其析构函数中删除它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。