C语言Error C6011:解引用NULL指针‘sequence’问题求助
关于C程序中sequence变量的警告解释与修复方案
警告原因
这个警告的核心是你没有检查malloc的返回值。malloc在内存分配失败(比如系统剩余内存不足)时会返回NULL空指针。如果直接用这个空指针去访问数组元素(比如第一个for循环里的sequence[i] = i * 10),会触发未定义行为,编译器会提前识别这种风险并给出警告。
修复方案
解决方法很简单,在分配内存后立即检查指针是否为NULL,如果分配失败就做错误处理:
- 新增
malloc返回值的判断逻辑,若分配失败则打印错误信息并退出程序 - 可选优化:去掉
malloc返回值的强制类型转换(C语言中不需要,强制转换是C++的写法)
修复后的完整代码
#include <stdio.h> #include <stdlib.h> int main() { int* sequence; int sequenceSize = 10; // 去掉不必要的强制类型转换 sequence = malloc(sequenceSize * sizeof(int)); // 检查内存是否分配成功 if (sequence == NULL) { fprintf(stderr, "内存分配失败\n"); return 1; // 用非0返回值表示程序异常终止 } for (int i = 0; i < sequenceSize; i++) { sequence[i] = i * 10; } for (int i = 0; i < sequenceSize; i++) { printf("%d ", sequence[i]); } free(sequence); return 0; }
额外说明
如果你的编译器是老版本的C标准(比如C89),for循环里定义int i是不允许的,需要把i的定义移到循环外,但从你的代码写法来看应该是用的C99或更高版本,这个问题可以忽略。
内容的提问来源于stack exchange,提问作者Alon Kalif
相关产品推荐
相关产品推荐

