malloc分配的記憶體訪問失敗問題

2021-10-01 06:06:06 字數 1396 閱讀 6567

問題描述:

在vs中編寫c語言**。再main函式中呼叫malloc的程式正常執行。放在另外乙個.c檔案裡總是報訪問失敗。

char * test = (char *)malloc(10);

memset(test,0,10);

非常基礎的一句話。

執行memset,訪問記憶體的時候總是異常。

問題分析:

當檢視記憶體的時候,偵錯程式的反應是

為啥會造成讀取出錯呢?

檢視反彙編**如下(彙編解釋在最後):

char * test = (char *)malloc(10);

00007ff7d7ad1d5a mov ecx,0ah

00007ff7d7ad1d5f call malloc (07ff7d7ad1361h)

00007ff7d7ad1d64 cdqe

00007ff7d7ad1d66 mov qword ptr [test],rax

msdn上寫的。使用malloc需要包含標頭檔案 and問題原因:包含之後的正確的反彙編是:

char * test = (char *)malloc(10);

00007ff7d1411d5a mov ecx,0ah

00007ff7d1411d5f call qword ptr [__imp_malloc (07ff7d14344d0h)]

00007ff7d1411d65 mov qword ptr [test],rax

問題解決方法:使用malloc需要包含標頭檔案 and彙編解釋:mov 指令:指令用於將乙個值寫入某個暫存器

call指令:呼叫功能。這些指令實現了子例程的呼叫和返回

cbw/cwde/cdqe擴充套件指令:使用符號擴充套件的方式對源運算元進行雙倍擴充套件。使用eax的最高位拓展rax高32位的所有位

qword ptr:指標內容。大小指令byte ptr,word ptr和dword ptr可以達到這個目的,分別指示1、2和4個位元組的大小。

記憶體充足時,malloc記憶體分配失敗問題

如題,為什麼記憶體充足時,malloc記憶體分配失敗?首先,在32位平台下,系統最多可管理4g記憶體,其中2g系統自用,剩下2g可供使用者使用,然而在實際分配時,使用者可用空間始終小於2g 若有童鞋在如上條件下分配空間 等於或大於2g可以聯絡我哦,以讓我糾正自己的錯誤 64位則可以管理好多,有興趣的...

malloc記憶體分配原理

一 malloc的工作機制 它有乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二 一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組 接下來,將分配給使用者的那塊記憶體傳給...

malloc記憶體分配原理

一 malloc的工作機制 它有乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二 一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組 接下來,將分配給使用者的那塊記憶體傳給...