0
#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
,它開車撞下面的堆棧:程序崩潰上在C通過局部變量地址來共享指針++
vidhu @〜/文檔/ CPP_Practice $ ./a.out FUNC *錯誤的`./a.out 「:免費():無效的指針:0xbfc7f13c *
中止(核心轉儲)
這是爲什麼發生?我認爲刪除NULL
指針是安全的,但它不是很好的編碼習慣。
當'ptr'超出範圍,它的析構基本上不'刪除&所以LocalVariable;',其表現出不確定的行爲如'&localVariable'不是由'new'獲得的指針。我不確定你在說什麼'NULL'指針。 –
@IgorTandetnik也嘗試過: int * q =&localVariable; shared_ptr ptr3(q); 現在我得到了雙倍免費或腐敗(出)錯誤。這個指針也沒有被新的獲得。那麼爲什麼我在這裏得到雙倍免費錯誤。 –
我不知道我明白你在問什麼。未定義的行爲是未定義的。如果這樣做會傷害你,那麼不要這樣做。這個調查的具體內容是什麼?是否存在您正在嘗試解決的實際問題? –