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