小心指標被delete兩次

2022-05-23 04:57:08 字數 1718 閱讀 6585

c++類中,有時候使用到傳值呼叫(物件實體做引數),遇到這種情況,可要小心了!特別是當你所傳值的物件生命週期較長,而非臨時物件(生命週期段)的時候。來看看下面的情況:

#include

using namespace std;

class text

void settext(char* str)

char* gettext() const

~text()

};

void print(text str)

intmain()

上面執行的結果程式崩潰了。原因:

print(text str)在對str進行複製構造的時候,沒有進行深度拷貝;當 print退出的時候,因為是臨時物件(函式初始時構造),對str進行析構,此時還沒有任何破綻;但回到main,繼而退出main 的時候,又對t進行析構,但此時t內的str中的內容已經被銷毀。由於對一記憶體空間實施了兩次銷毀,於是出現記憶體出錯。

解決方法:

重寫淺拷貝。像一下版本,不同的情況要作出適當的調整: 

#include

usingnamespacestd;

classtext

text(text &t)

voidsettext(char* str)

char* gettext()const

~text()

};

voidprint(text str)

intmain()

voidprint(text &str)

除非物件內所有的成員讀屬非指標記憶體內容,那麼謹慎使用文章前面的用法。

我的站被收錄了兩次,被封掉兩次,怎麼辦?

診斷結果 查log說明是網頁上的問題。1 上線初期便對 進行多次title級改動,影響了搜尋引擎對其信任度。2 大規模改動了url連線。4 首頁有很多不規範的鏈結,死鏈結 什麼是死鏈結?5 首頁有一些 的詞彙。這裡不寫出來,不然本站也危險了,呵。建議 以上六點分別在某個程度上決定搜尋引擎對站點的信任...

QT 之信槽函式被觸發兩次

2017年11月02日 20 28 17 不二儂 閱讀數 950 標籤 qt 更多 個人分類 qt 如果用官方的寫法on btn pressed 可以不用寫connect函式,可以直接觸發槽函式。如果此時用connect再次連線的話,就會導致on btn pressed 被執行兩次。解決辦法為 可能...

關於兩次fork

兩次fork 的作用 首先,要了解什麼叫殭屍程序,什麼叫孤兒程序,以及伺服器程序執行所需要的一些條件。兩次fork 就是為了解決這些相關的問題而出現的一種程式設計方法。孤兒程序 孤兒程序是指父程序在子程序結束之前死亡 return 或exit 如下圖1所示 在一定時間內,當系統發現孤兒程序時,ini...