C++数组运行触发Null pointer exception,求教异常原因
问题分析与修复
你的代码里存在几处关键错误,直接导致了异常和编译问题:
数组声明语法错误
C++不支持int[] arr这种Java风格的数组声明,正确写法是int arr[] = {1, 2, 3};。这个语法错误会让编译器无法正确识别数组变量,进而引发后续访问时的空指针类异常。数组越界访问
你的数组只有3个元素,合法索引是0、1、2,但循环条件写的i < 4,当i=3时,访问arr[3]属于数组越界访问,这是C++中的未定义行为,可能触发空指针异常、程序崩溃或输出垃圾值。正确的循环条件应该是i < 3,更稳妥的方式是用sizeof(arr)/sizeof(arr[0])自动计算数组长度:
for(int i=0; i < sizeof(arr)/sizeof(arr[0]); i++)
- exit函数调用错误
exit 0;缺少括号,正确写法是exit(0);。另外在C++的main函数中,直接使用return 0;会更规范,无需调用exit。
修复后的完整代码:
#include <iostream> using namespace std; int main(){ int arr[] = {1, 2, 3}; for(int i=0; i < sizeof(arr)/sizeof(arr[0]); i++){ cout << arr[i] << endl; } return 0; }
补充说明:数组越界访问在C++中不会抛出明确的标准异常,属于未定义行为,表现形式不确定,一定要严格避免。
内容的提问来源于stack exchange,提问作者Александр Шафиков
相关产品推荐
相关产品推荐

