【问题标题】:for this code I am getting run time error .Abort signal from abort(3) (SIGABRT)'对于此代码,我收到运行时错误。来自 abort(3) (SIGABRT) 的中止信号'
【发布时间】:2021-11-24 13:28:08
【问题描述】:
 #include <iostream>
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() {
    //code
    int T,N,A[N];
    cin>>T>>N;
    for(int i=0;i<N;i++){
        cin>>A[i];
    }
    reverse(A,N);
    //please help it its getting into my nerves

    return 0;
}

请帮我解决这个问题 对于此代码,我收到运行时错误 .Abort signal from abort(3) (SIGABRT)'

【问题讨论】:

  • int T,N,A[N];...A 有多少元素,在这里声明?
  • 总是在启用警告的情况下进行编译,并且不要接受代码,直到它在没有警告的情况下编译。要启用警告,请将 -Wall -Wextra -pedantic 添加到您的 gcc/clang 编译字符串(也可以考虑添加 -Wshadow 以警告阴影变量)。对于 VS(Windows 上的cl.exe),使用/W3。所有其他编译器将具有类似的选项。阅读并理解每个警告——然后去修复它。警告将识别任何问题,以及它们发生的确切行。通过聆听编译器告诉您的内容,您可以学到很多东西。

标签: c++ runtime-error abort


【解决方案1】:

您收到错误是因为您没有使用默认值初始化变量。

问题1:int T,N,A[N];这里N被初始化为垃圾值。

问题 2:在从输入中获取 N 值之前初始化/声明 A[]

解决方案:

 int T,N;
 cin>>T>>N;
 int A[N];

旁注:使用下面给出的向量有更好、更有效的解决方案:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void reverse(vector<int>& x) {
     reverse(x.begin(), x.end());

  return;
}

int main() 
{
vector<int> list;
int listSize;

cout << "How much element you want to put in list" << endl;
cin >> listSize;

cout << "Enter the numbers :" << endl;
for (int number; cin >> number;) {
        list.push_back(number);
     
     if (list.size() == listSize)
        break;

}

reverse(list);

cout << "The reverse of your numbers : ";
for (const int x : list)
    cout << x <<' ';

cout << endl;

return 0;

}

【讨论】:

【解决方案2】:

这里的问题是您在将任何值分配给 N 之前声明 A[N]。输入 N 的值后声明 A[N]。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    相关资源
    最近更新 更多