簡體   English   中英

將局部變量地址傳遞給C ++中的共享指針時程序崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM