[英]Program crashes on passing local variable address to shared pointer in c++
#include <iostream>
#include <memory>
using namespace std;
void func ()
{
cout << "func\n";
int localVariable = 10;
int* p = new int;
shared_ptr<int> ptr (&localVariable);
shared_ptr<int> ptr1 (new int);
shared_ptr<int> ptr2 (p);
}
int main ()
{
func();
return 0;
}
我試圖將堆分配的內存直接傳遞給shared_ptr
並且還嘗試了一些之前分配的指針,無論是編譯還是成功運行。 但是,當我嘗試將局部變量的地址傳遞給shared_ptr
,它與以下堆棧崩潰:
vidhu @〜/ Documents / CPP_Practice $ ./a.out func *`./a.out'中的錯誤:free():無效的指針:0xbfc7f13c *
中止(核心已棄用)
為什么會這樣呢? 我認為刪除NULL
指針是安全的,但它不是良好的編碼習慣。
當ptr
超出范圍時, shared_ptr
將嘗試刪除localVariable
。 但是, localVariable
不是堆分配的(通過new
),因此無法刪除(並且其內存由堆棧自動管理)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.