最近帮同学调一段程序,调试发现,程序其中的一个malloc函数返回值为空,我们知道如果申请分配的内存空间太大,系统无法获得符合要求的内存块,malloc函数会返回NULL,而这个程序中申请的空间是很小的,系统内存也很充裕,所以问题不在这儿。
后来仔细推敲代码,发现程序中在返回值为NULL的malloc之前,有过若干次的malloc,然而对申请到的空间初始化的范围大小超过了前边malloc申请的大小,改正之后程序运行正常。
应该是写越界,有可能覆盖到了下一个空闲块的头节点,从而破坏了 malloc管理的环形链表, malloc就无法从一个空闲块的指针字段找到下一个空闲块了。
所以当遇到malloc失败时,可以检查一下,操作的内存空间大小是否超过了之前malloc申请的空间。