debugging - SIGSEGV 错误,代码是正确的,但仍然没有给出任何输出,有人可以解释一下吗
问题描述
#include <iostream>
#include <bits/stdc++.h>
#include <stack>
#include <algorithm>
#include <vector>
#include <iterator>
#define ll long long
using namespace std;
int main() {
ll t;
cin >> t;
while(t--) {
ll n,k;
cin >>n >>k;
vector<ll> arr;
for(int i=0; i<n; i++) cin >>arr[i];
vector <ll> freq;
for(int i=1;i<=k;i++) freq.push_back(i);
ll min=n,val,diff=0,max=0;
for(int i=0;i<k;i++){
ll c=count(arr.begin(),arr.end(),freq[i]);
if(min>c)
{min=c;
val=freq[i];
}
}
if(min==0) max=n;
else{
vector<ll> diffarr;
diffarr.push_back(0);
for(int i=0;i<n;i++)
{
if(arr[i]==val){
diffarr.push_back(i);
}
}
for(int i=0;i<min;i++)
{
diff=diffarr[i+1]-diffarr[i];
if(max<diff) max=diff;
}
}
cout <<max <<endl;
}
return 0;
}
当不接受输入时,代码工作正常,但一旦我接受输入,它就会抛出一个 SIGSEGV 错误,我已经对其进行了多次调试,以消除所有分段错误和各种错误。有人可以调查一下吗,那将是 gr8 的帮助
解决方案
代码是正确的
不,不是。从这些行开始:
vector<ll> arr;
for(int i=0; i<n; i++) cin >>arr[i];
您声明一个空向量arr
,并立即尝试写入该向量中的元素 0。
但是向量还是空的,所以里面没有元素0。在大多数 STL 实现中,这将通过尝试写入地址 0 来崩溃。
阅读如何调试小程序可能会让您受益。学习如何使用调试器也是如此。
推荐阅读
- javascript - 如何从返回 document.write() 的 URL 异步显示数据?
- node.js - 如何在应用洞察中获取消息计数
- vespa - 加载模型时出错:缺少链“vespa”
- c# - SAML2 AssertionConsumerService 端点的规范无效
- azure-active-directory - 具有现代身份验证和应用注册的 PnP
- delphi - 使用 RTTI 方法调用返回的函数引用
- mysql - Mysql排序价格,当千到K,万到M
- sas - SAS SYSCC 宏变量行为
- android - 使用 GridLayoutManager 增加 RecyclerView 中的单元格宽度
- python - Python 除了错误处理不显示我告诉它的文本和错误,只是崩溃并显示奇怪的行?