一個指標釋放後不置空的危害
今天面試碰到這個問題了,可以說這個問題是我回答最冤枉的。
我覺得我對這個問題,有很清晰的認識。但是不知道為什麼,嘴禿嘍了一句記憶體洩漏,真想打自己一個大嘴巴。
記憶體洩漏的情況的產生是:例如:用int* p=(int*)malloc(sizeof(int));讓p重新指向其它,這樣用malloc()開闢的空間就找不到了,造成記憶體洩漏。
一個指標釋放後不置空的後果:
free(p);後p是一個非法的指標。不可以訪問它。如果程式碼很長,誤以為p合法,直接訪問,有可能會造成程式崩潰。
不置空的話,在後面無法檢測指標的合法性。我們在平時程式設計時,對空指標很容易檢測(if(NULL==p)),但是對於非法指標p不為空,我們是無法檢測到的。
防止對一個已經釋放的指標多次釋放造成程式崩潰,但是對一個null指標多次釋放是合法的。
所以,我們在free後一定要將指標置空。
防止我們忘記,可以在程式開始用巨集定義一個函式:
#define SAFE_FREE(p) \
if
(p) \
{ \
free
(p); \
p = NULL; \
}
這樣我們就可以使用SAFE_FREE防止我們忘記置空。
不置空的危害性是非常大的,所以一定要置空。
相關推薦
一個指標釋放後不置空的危害
今天面試碰到這個問題了,可以說這個問題是我回答最冤枉的。 我覺得我對這個問題,有很清晰的認識。但是不知道為什麼,嘴禿嘍了一句記憶體洩漏,真想打自己一個大嘴巴。 記憶體洩漏的情況的產生是:例如:用int* p=(int*)malloc(sizeof(int));讓p重新指向其
理解對C++裸指標釋放後重用的問題
本文將以Android 2.2-2.3上的一個zergRush漏洞為例,分析指標釋放後重用的問題。 zergRush是Android 2.2-2.3上的一個漏洞,主要問題就在於指標的釋放後重用。 zergRush利用了libsysutils庫提供的Frame
不學無數——Spring注入後反射的空指標異常
Spring注入後反射的空指標異常 自動裝配是在spring環境下當使用該類的例項時由spring容器完成了類的例項化過程,包括對依賴物件的例項化過程。 而通過反射建立例項時,是根據你呼叫的建構函式完成的例項化過程,沒有容器的自動化建立例項了,所以需要自己
QList指標中的clear後不會自動釋放記憶體,需要之前呼叫qDeleteAll()
QList<T> 的釋放分兩種情況: 1.T的型別為非指標,這時候直接呼叫clear()方法就可以釋放了,看如下測試程式碼 #include <QtCore/QCoreApplication>#include <QList>#inc
解決IOS微信內置瀏覽器返回後不執行js腳本的問題
style load 返回 on() cti 發現 bsp 內置瀏覽器 false 在A頁面寫一個$(function(){}) 後隨便點擊一個URL跳轉到B頁面 利用微信內置瀏覽器 返回鍵返回到A頁面後發現這段JS不執行,後來找到了解決方案 $(f
TextEdit不能空驗證設置
rule ror pty 參數表 兩個 lan not new span 在工具箱中找到dxValidationProvider控件拖拉到界面上,添加代碼 ConditionValidationRule notEmptyValidationRule = new Condi
Java判斷一個字符串str不為空:方法及時間效率
調用 大小 ise str 6.0 bsp 方法 而且 表示 判斷一個字符串str不為空的方法有: 1、str == null; 2、”“.equals(str); 3、str.length <= 0; 4、str.isEmpty(); 註意:leng
oracle數據庫產生誤操作,將一個字段置空了,恢復數據
clas ora ati oracle數據庫 oracl col 就是 一個 log 工作的時候沒仔細檢查sql直接執行了,將線上的數據弄錯了,發現抓緊修改,還好只修改了一個表的一列; 在網上查了下oracle可以查詢24小時任何時刻的數據 select * from bt
解決vuejs 創建數據後設置對象的屬性實現不了雙向綁定問題
asc PE quantity VM type 響應 rip 頁面 RR 拋出踩坑:vue創建後的數據,自定義設置對象的屬性,實現不了雙向綁定 當業務場景,需要在請求接口數據新增自定義的屬性 let foodList = [ {title: ‘回鍋肉‘, price:
從一個控制器返回後,控制器所屬的tabbarController沒選中(tabbarItem圖示不亮)
最近在使用UITabbarController遇到一個問題,就是所屬tabbarController的一個控制器,在使用popViewControllerAnimated方法回到tabbarController時,控制器所屬的tabbarItem沒有顯示選中。可以在AppDelegate.m中的
idea設置Springboot項目修改html後不需要重啟
put one com automatic class app output when pre idea 2.5 spingboot 2.1 測試通過,方法如下: 在pom.xml中加入下面的依賴 <dependency> <groupId&g
Android Studio, CLion, GoLand, IntelliJ IDEA, PhpStorm, PyCharm, RubyMine, WebStorm漢化以及漢化後設置不能開啟問題
漢化之後有可能會出現設定不能開啟的問題,是因為漢化包出錯了 CSDN上一堆要求C幣下載的漢化包,又不是他自己原創的 以下所有漢化包轉載自https://www.pingfangx.com/xx/translation。 Android Studio 3.0-3.1.3漢化包CLion 2
C++中如果宣告一個物件指標時,會不會呼叫建構函式?
C++中如果宣告一個物件指標時沒有分配記憶體,那麼不會呼叫建構函式 一個指標在記憶體中也是有記憶體空間的。 在現在大多數機器上指標都是32位的,也就是4個位元組。 如果你宣告指標。例如,假設A是一個類 A *pa; 這記憶體中會分配4個位元組的空間儲存一個地址。只不過地址是不可以用
android啟動執行緒後需要手動釋放,系統不回收的執行緒
1. ThreadPool:必須主動銷燬,不然所有執行緒均還存在; 2. HandlerThread:如果是自己new出來的, 必須主動銷燬,不然執行緒均還存在; 3. GlSurfaceView: 必須主動呼叫release,不然執行緒會存在 不會有執行緒洩露的有:
Java 物件使用後設置為 null 不會減少記憶體佔用
轉載自《碼農每日一題》 問:Java 物件使用後設置為 null 會減少記憶體佔用嗎? 答:不會,設定為 null 只是棧中指向的引用為 null,但是 new 出來的物件還是存在於堆裡面的,按照目前的 GC 演算法,要等 survior1 or survior
java 中的空指標,不為空,的理解
一、null是代表不確定的物件 Java中,null是一個關鍵字,用來標識一個不確定的物件。因此可以將null賦給引用型別變數,但不可以將null賦給基本型別變數。 比如:int a = null;是錯誤的。Ojbect o = null是正確的。 Java中,變數的
解決ubuntu16.04在安裝完vmware-tools後設置共享目錄之後,在/mnt/hgfs下看不到共享目錄。
第一步:首先安裝 open-vm-tools sudo apt-get install open-vm-tools第二步:sudo /usr/bin/vmhgfs-fuse .host:/你設定的共享目錄名字(根據實際情況) /mnt/hgfs/ -o allow
如何讓file input能夠實現置空和【非同步】上傳後相同檔案的再次選擇觸發change
file input出於安全形度,是不允許賦值的,即使是置空,雖然通過給outerHtml賦值可以清空,但貌似僅在ie下起使用。 因為缺少置空的方法,使用者非同步上傳完畢檔案後選擇相同檔案時,不會觸發change,因為在這種情況下,我們沒有辦法使value(也就是檔案路
在angular中一個頁面滾動後,打開新頁面不在最頂部的解決辦法
頂部 ima title 滾動 com http png 官方文檔 service 解決辦法:使用$anchorScroll 找到當前頁面的controller,在開頭中加入以下部分代碼,如圖所示: $anchorScroll的剩余用法請參考官方文檔: https://d
面試中遇到的問題:一個指標重複釋放會出現什麼情況
一個指標重複釋放會出現什麼情況? 我當時的回答是:1.空指標可以重複釋放 2.非空指標(可能大概)會報錯。 由於好幾天沒有寫程式碼,對指標有些生疏了,所以對非空指標的情況不太確定 。 所以剛才編寫了一個小程式碼進行了測試:#include <stdio.h> i