記憶體釋放的一些大坑

2021-09-29 04:46:46 字數 888 閱讀 5525

1 #include2 

3 #include4

5 6 int main()

7 33

}問題1: free()釋放的原理是什麼, 因為即使記憶體釋放後, 也是有可能能對對其進行操作賦值訪問操作的,

所以怎麼證明記憶體已經被釋放了?

問題2: char *p = (char*)malloc(100);

p+=6;

char *q=p-6;

free(q);

(1)會發生什麼?

(2)訪問已經釋放過的**會發生什麼?

(3free()釋放記憶體分配到某一部分會怎樣?

問題3: 嘗試反彙編malloc()分配的彙編**

問題4:

其他問題:

malloc 有兩種訪問方法, 一種是指標法, 一種是下標法

案例: pi = malloc( 25 * sizeof(int) );

int *pi2, i;

...pi2=pi;

for(i=0; i < 25; i++) //第一種訪問方法

*pi2++ = 0;

int i;

...for( i=0; i < 25; i++) //第二種訪問方法

pi[i] = 0;

常見的動態記憶體錯誤:

對null指標進行解引用,

對分配的記憶體進行操作時越過邊界

釋放並非動態分配的記憶體

試圖釋放一塊動態分配的記憶體的一部分,

例如: pi = malloc( 10 * sizeof(int) );

free(pi);

一塊動態記憶體被釋放後被繼續使用

......未完待續...

OpenCV 有關記憶體釋放的一些問題

前一天把系統整個重寫了一遍,脈絡清晰了很多,也終於解決了以前很多崩潰,異常退出的問題。這裡小小總結一下自己遇到的麻煩。記憶體洩露是說沒有釋放已經不能使用的記憶體,這裡一般指堆的記憶體才需要顯示的釋放。比如用malloc,calloc,realloc,new分配的記憶體是在堆上的,需要用free,de...

記憶體的一些知識

記憶體分類 從標準上可以分為 simm dimm 從外觀上可以分為 30線 64線 72線 100線 144線 168線 200線和卡式 插座式。從晶元類別上可以分為 fpm edo sdram rambus ddr 從整體效能上可以分為 普通 無任何特殊功能 帶校驗 自動檢錯 帶糾錯 自動糾錯 三...

關於一些記憶體的東東

程序的記憶體占用都是指的虛擬記憶體.實際的物理記憶體占用是很難按程序劃分的,比如兩個程序同時使用乙個 dll,它們的某些區段在物理記憶體中可能是重疊的,那麼這部分記憶體算哪個程序的物理記憶體?而且物理記憶體完全由作業系統管理了,如果其中某部分即使曾經讀寫過,由於最近沒有使用也可能被作業系統交換到了硬...