goto對資源的釋放問題的解決

2021-06-29 02:37:04 字數 692 閱讀 3440

q:一塊**中有大於1的資源的分配時,很容易造成跳過資源的釋放;從而導致資源的洩露。

a:利用goto語句的跳轉特點可以一定程度上解決這個問題

example:

file *f1=open();

if(null==f1)

goto error1;

}file *f2=open();

if(null==f2)

goto error2;

//如果跳到error2;會先執行error2再執行error1

error2:

if(null !=f2)

fclose(f2);

error1:

if(null !=f1)

fclose(f1);

return;

第二種方法,(我覺得更好)

file *f1=open();

if(null==f1)

goto error;

}file *f2=open();

if(null==f2)

goto error;

//如果跳到error2;會先執行error2再執行error1

error:

if(null !=f2)

fclose(f2);

if(null !=f1)

fclose(f1);

return;

c c 函式資源釋放時避免goto的方法

開發c c 模組時,因為很多記憶體資源都需要自己釋放,為了統一乙個地方釋放資源通常用goto標籤在函式退出時釋放資源,好處是資源統一釋放,不會因為在提前return時分別釋放資源導致以後修改 遺漏釋放某些資源導致死鎖或者記憶體洩漏。以下是goto模式 void goto function snpri...

基於webrtc的資源釋放問題(一)

基於webrtc的資源釋放問題 一 重複釋放webrtc的相關資源 背景 最近一段時間在做基於webrtc的android應用在釋放資源時遇到一些問題,現在記錄下來用於備忘。1 釋放peerconnection資源的問題。現在b中終止通話 錯誤 在b終止通話之後,a端的程式程式會意外退出。分析 在a...

關於類資源的釋放

關於類資源的釋放 我們自定義的類並不像窗體類那樣當窗體關閉時自動呼叫釋放函式 實際上是過載基類函式 如下 清理所有正在使用的資源。如果應釋放託管資源,為 true 否則為 false。protected override void dispose bool disposing base.dispos...