为啥我在此代码中收到 SIGABRT 错误 [关闭]
Posted
技术标签:
【中文标题】为啥我在此代码中收到 SIGABRT 错误 [关闭]【英文标题】:Why am i getting a SIGABRT error in this code [closed]为什么我在此代码中收到 SIGABRT 错误 [关闭] 【发布时间】:2020-06-08 03:57:25 【问题描述】:我在 CodeChef 中编写了这段代码,但它不断给我运行时错误,称为 (SIGABRT)。我一直在尝试解决这个问题,但没有结果。我已经最大限度地减少了记忆。我需要帮助。
有 N 个学生站成一排,从左到右从 1 到 N 编号。给定一个长度为 N 的字符串 S,其中对于每个有效 i,如果第 i 个学生是女孩,S 的第 i 个字符是“x”,如果这个学生是男孩,则为“y”。排成一排的学生是朋友。
要求学生组成双人组参加舞蹈比赛。每对必须由一个男孩和一个女孩组成。两个学生只有成为朋友才能结成一对。每个学生最多只能参加一对。最多可以组成多少对?
示例输入 3 xy xyxxy 是的
示例输出 1 2 0
解释 示例案例 1:只有一个可能的对:(第一个学生,第二个学生)。
示例案例2:形成两对的方法之一是:(第一个学生,第二个学生)和(第四个学生,第五个学生)。
另一种形成两对的方法是:(第二个学生,第三个学生)和(第四个学生,第五个学生)。
#include <iostream>
#include <string>
#define rp(l,p) for(int l = 0; l < p; l+=2)
#define s string
#define ll long long
using namespace std;
int main()
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// your code goes here
int t = 0;
cin >> t;
while(t--)
s n = "";
ll max = 0;
cin >> n;
if(n.size()%2 == 0)
rp(l, n.size()-1)
if(n.substr(0+l, 2) == "xy" || n.substr(0+l, 2) == "yx")
max+=1;
else if(n.size()%2 == 1)
s x = n.substr(n.size()-1, 1);
n.resize(n.size()-1);
for(int m = 0; m <= (n.size()-1); m+=2)
if(n.substr(0+m, 2) == "xy" || n.substr(0+m, 2) == "yx")
max+=1;
n.append(x);
if(n.substr(n.size()-3,2) == "xy" || n.substr(n.size()-3,2) == "yx")
else if(n.substr(n.size()-2,2) == "xy" || n.substr(n.size()-2,2)=="yx")
max+=1;
cout << max << endl;
return 0;
【问题讨论】:
一些导致问题的示例输入会有所帮助 由于所有这些宏和非描述性的单字符变量,显示的代码很难理解。如果我要向其他人寻求帮助以找出我的代码存在的问题,我会尽量使其易于理解和具有描述性。我的代码越容易被别人理解,就越有可能有人看到问题。 我无法在不知道输入的情况下重现您的错误。这是link,您可以使用您的输入来触发sigabrt 并对其进行调试。只需单击“开始”即可构建您的代码,然后在终端中运行它。 我使用建议的输入运行了您的代码,并且成功了。你能提供一些不起作用的输入吗? 【参考方案1】:我完全同意@Sam Varshavchik
但是,我尝试使用以下输入的代码:
试试
$ ./test
输入 2
输入哈
输出 0
输入lo
输出 0 => 没有崩溃
试试
$ ./test
输入 2
输入哈
输出 0
输入lo
输出 0
=> 没有崩溃
试试
$ ./test
输入 2
输入一个
在抛出 'std::out_of_range' 的实例后调用终止 what(): basic_string::substr: __pos (即 2) > this->size() (即 0) 中止(核心转储)
所以让我们分析一下你的代码。当字符串 n 的大小为 1 时,它似乎会崩溃。
在您的 substr 调用中,如果字符串具有所需的长度(又名 substr(...,2)),则有很多没有任何验证的硬编码整数
【讨论】:
以上是关于为啥我在此代码中收到 SIGABRT 错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在此 SQL Server 内联表值函数上收到 11555 错误?
为啥我在 Firebase Cloud Functions 中收到“无效信封”错误? [关闭]