“中止信号(3)(SIGABRT)”。为什么只适用于某些情况?

时间:2018-05-22 04:04:57

标签: c++ arrays signals sigabrt abort

我试图从数组元素中形成最大数字。我在下面给出的实现对于某些情况和其他一些给出错误的工作正常 “中止信号(3)(SIGABRT)”。为什么?救救我!

{name:"some one", permissions:{restrictedArea:false,sandbox:true}} //and so on...

对于以下情况,我的代码给出错误

4                  //size of array
54 546 548 60      //elements of array

6 个答案:

答案 0 :(得分:0)

这是由于函数stoi这对于字符串到int转换的使用没有很大的作用

手动将字符串转换为int Algo如下所示;

int x=0; // may take long long 
for(int i=0;i<s.length();i++)
x=x*i+s[i]-'0';

x是字符串的int值。

答案 1 :(得分:0)

这是由于INT_MAX和INT_MIN值,即2 ^ 31-1和-2 ^ 31,它们不能存储在整数类型数据中; 也 int z = stoi(string x)转换并将字符串返回int

答案 2 :(得分:0)

要根据您的程序,仅通过添加数组的第一个和最后一个元素(字符串方式)来获得最大数字,请尝试以下操作:

s = to_string(a[0]); #to get the first element

s1 = s1 + to_string(a[i]); #to get the ith element
     
s2 = to_string(a[i]) + s2;

这样你就可以使用数组的所有元素,而不是只使用第一个和最后一个元素。

答案 3 :(得分:0)

不使用 'stoi' 函数,而是使用以下代码将字符串转换为整数:

    int num = 0;  
    for(int i = 0; i < s.length(); i++){
        num = num * 10 + s[i] - '0';
    }

答案 4 :(得分:0)

如果程序检测到错误本身,则使用调用 abort() 生成此信号。标准库也使用此信号来报告内部错误。 c++中的assert()函数也使用abort()来产生这个信号。

答案 5 :(得分:0)

当您无限循环或未完成弹出操作时会发生此错误,我之前遇到过相同的错误,但可以在之后设法解决