这是我的代码。
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<string> v;
for(int i=0; i<n; i++)
{
string temp;
cin>>temp;
v.push_back(temp);
//if(v.size() == 1)
//{
// continue;
//}
//cout << i << endl;
//cout << endl;
//cout << v.size();
int k = i;
while(v[k-1].length() > v[k].length() && k>-1)
{
swap(v[k], v[k-1]);
k--;
}
//cout << endl;
}
bool check = true;
for(int i=0; i<v.size()-1; i++)
{
//cout << v[i] << endl;
//cout << v[i+1] << endl;
if (v[i+1].find(v[i]) != std::string::npos)
{
//std::cout << "found!" << '\n';
continue;
}
//cout << "false" << endl;
check = false;
}
if(check == true)
{
cout << "YES" << endl;
for(int i=0; i<n; i++)
{
cout << v[i] << endl;
}
}
else
{
cout << "NO" << endl;
}
}
这个错误的原因是什么?
输入是:
100
npugmvzdgfnzyxuyfwbzwktiylhvhwgeqauolidpnbemhgbunpefzsltewkxdcrzxgvmkb
bezfumiguzafxghvcfqmwpopxvazctlftelveayycypjckooxeehyk
ingenqhogs
elhnhxjwrytbmmqdwwrivvljybhnwfgwhvdgjqgqgvunuemdtrgpyvaanovheqbupamzrjxh
rpvktlmyxfshahfgunrhuqtosysymfjruqlzdooauuihtchzqgyrhcoxbtoorkxkwakvdkiakitlqfbgz
tnrnpghjmqumbzfnztiijgwkiygyfevfebuammkwnoinqvhhlsuoqtfkazqhlnuqtthudhhovjqiuykwqtck
mloehzniuwyakgwmopfgknpoiuiyewijmoefjjjsdimkisugehwqefcx
tthmaxtahimxxts
fspoetalxgcgowhjtanerjpqnen
hefsyokneekdgpbicss
它适用于其他情况。
诊断检测到问题 [cpp.clang++-diagnose]:C:\Program Files (x86)\Microsoft Visual Studio�7\Enterprise\VC\Tools\MSVC .11.25503\include ector:1802:11:运行时错误:添加未签名0x129000a0 的偏移量溢出到 0x12900088
摘要:UndefinedBehaviorSanitizer:未定义行为 C:\Program Files (x86)\Microsoft Visual Studio�7\Enterprise\VC\Tools\MSVC .11.25503\include ector:1802:11 in
此错误的原因是什么:
您将
i
设置为 0
int i=0;
然后将
k
设置为 0
。
int k=i;
然后使用
k-1
来索引 std::vector<std::string> v
。
while(v[k-1].length()
k-1
是-1
,但情况会变得更糟。 std::vector::operator[]
将参数转换为 unsigned
类型,产生一个 难以置信的巨大、根本无效的索引。
std::vector::operator[]
执行边界检查,最终会将不属于你的内存视为有效构造的 std::string
。
谢谢兄弟,你太有帮助了…… 但这不是针对具有类似情况的其他问题提出的问题...