malloc()函數分配內存失敗的常見原因:
1. 內存不足。
2. 在前面的程序中出現了內存的越界訪問,導致malloc()分配函數所涉及的一些信息被破壞。下次再使用malloc()函數申請內存就會失敗,返回空指針NULL(0)。
malloc中做了哪些事情:
簡單的說就是系統中有一個位置標記,標記了 當前已經用掉的內存用到了什么位置,系統中還有一個鏈表把各個未用的內存塊連接起來,申請新內存的時候就未分配的鏈表中依次查找一個夠用的內存塊,把這次分配的內存地址返回給用戶,把這次用掉的進行映射,未分配的部分返回給鏈表,如果沒有合適大小的內存,還需要先進行內存整理合並。
詳細情況看到這個博客寫的不錯:https://blog.csdn.net/mmshixing/article/details/51679571
查看方式:
1、內存不足,使用free命令查看當前還有多少內存,看是否合理,之前是否有內存泄漏等。
2、按照流程查看malloc失敗前的幾次malloc、memcpy或字符串拷貝等,查看是否有內存越界。