C++数组反转代码运行触发SIGABRT信号报错求排查解决
问题原因
- 核心错误是使用了非标准C++变长数组(VLA),且数组声明时
N尚未初始化:你在main函数第一行写了int T,N,A[N];,此时N还没有通过cin输入,取值为随机垃圾值,数组开辟的空间大小完全不确定,后续写入数组元素时会发生越界访问,触发内存错误进而抛出SIGABRT信号。 - 额外冗余问题:你定义了变量
T但全程没有使用,没有按照逻辑处理多组测试用例。
修复方案
将数组声明移到N输入完成之后即可,也可以替换成标准的std::vector保证符合C++标准,适配所有编译器:
#include <iostream> #include <vector> using namespace std; void reverse(int A[],int N){ for(int i=0;i<N/2;i++){ swap(A[i],A[N-i-1]); } for(int i=0;i<N;i++){ cout<<A[i]<<" "; } } int main() { int T,N; cin>>T; // 处理T组测试用例 while(T--){ cin>>N; // 兼容所有编译器的标准写法,也可以替换为编译器支持的变长数组写法 int A[N]; vector<int> A(N); for(int i=0;i<N;i++){ cin>>A[i]; } reverse(A.data(),N); cout<<endl; } return 0; }
内容的提问来源于stack exchange,提问作者vishal
相关产品推荐
相关产品推荐

