正常情况下使用malloc
申请内存,要么是申请成功返回有效地址,要么是内存申请失败(内存不足)返回NULL
如果出现返回了地址却无法访问的情况,很有可能是前面代码访问内存时出现了越界(在有效内存外进行了写入)的情况,影响到了malloc
时申请内存所需要的相关信息
但还有一种情况是已排除前面越界的可能,但仍然无法访问内存
目前该情况目前只在.c
文件的x64
位的visual studio 2017中遇见过(其他版本不确定)
malloc
申请内存成功时,本身是返回void *
类型的指针的,但在visual studio编译源码时,它并不包含stdlib.h
,并采用了一些自己的定义,返回int
类型,这就导致x64
中的8字节指针在发生强转时,缺失了4字节
解决方案: 在每个使用malloc
的文件中加上include <stdlib.h>
,或是定义一些宏,这将保证生成的源文件能包含stdlib.h