踩記憶體的簡單理解

2022-07-31 22:27:17 字數 733 閱讀 8610

定義:對不屬於你的記憶體進行讀寫叫踩記憶體。

分類:根據記憶體分配機制劃分,全域性區(.data/.bss),堆,棧踩的記憶體。

全域性區:

int array[10];  //全域性變數

void function()

for(i = 0; i <=10; i++)  //array的範圍為[0~9],這裡array[10] 已經踩記憶體

堆記憶體:

char *p = null;

p = malloc(5);       

strcpy(p, "hello");    //帶『/0』一共6個位元組,但申請的5個,所以p將多餘的乙個位元組踩壞,可能會影響到後續程式

棧記憶體:

void function()

int array[10];  //區域性變數

for(i = 0; i <=10; i++)  //array的範圍為[0~9],這裡array[10] 已經踩記憶體

如何定位這類問題:

這類問題指標導致的偏多,可以看下這個位址指向的位置是什麼內容,根據內容的大小(例如乙個結構體),前後走讀關聯**,以及位址屬於哪塊記憶體的,大致猜測可能的模組,是否有指標++等等

如何避免類似問題:

首先寫**要規範:區域性變數要進行初始化,申請的記憶體進行初始化,入參要進行判斷,釋放記憶體後指標要賦空。

記憶體儲存空間簡單理解

記憶體儲存空間的簡單介紹 記憶體儲存空間由 字元常量區 程式 區 靜態儲存區 動態儲存區。字元常量區 唯讀,顧名思義存放一些字元常量,即我們在電腦上可以列印出來的字元常量。程式 區 存放函式體的二進位制 靜態儲存區 存放全域性變數 靜態區域性變數 其生存週期 程式開始 程式結束 動態儲存區 分為棧區...

記憶體理解之簡單的記憶體修改器

前段日子因為學習記憶體把王艷平老師的書看了一遍綜合了其他書籍,簡單學習做了乙個記憶體修改器,下面是我覺得比較重要的知識,從書上摳了下來 類的形式寫的 hellogame.cpp 定義控制台應用程式的入口點。include stdafx.h include hellogame.h game game ...

簡單理解結構體的記憶體對齊

記憶體對齊三原則 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小或者成員的子成員大小 只要該成員有子成員,比如說是陣列,結構體等 的整數倍開始 比如int在32位機為 位元組,則要從 的整數...