分段故障(堆芯转储)矢量
Segmentation fault (core dumped) vectors
我试图编写一个简单的程序,从用户那里获取数字,然后对它们进行排序。我第一次使用向量,在终端中得到了这个"分段故障(核心转储("。smbd能帮我修复这个代码吗?我认为函数sortowanie((和table.esers((有问题,但我可能错了。
#include <iostream>
#include <vector>
using namespace std;
vector <int> table;
vector <int> sorted;
void out(){
for( size_t i = 0; i < table.size(); i++ ){
cout << table[i] << ", ";
}
}
int y=table[0];
int z;
void sortowanie(){
for( size_t i = 0; i < table.size(); i++ ){
if(table[i]<y){
y=table[i];
z=i;
}
}
sorted.push_back(y);
table.erase(table.begin()+z);
if(table.size() == 0){
out();
}
else{
sortowanie();
}
}
void dodawanie(){
int x;
cin >> x;
table.push_back(x);
if(x == 0){
sortowanie();
}
else{
dodawanie();
}
}
int main()
{
cout << "podaj liczby z przedziału liczb naturalnych n";
dodawanie();
return 0;
}
table.erase(table.begin()+z);
肯定是个问题,因为z
并不总是由z=i;
分配,而是仅当table[i]<y
时分配。所以把赋值从if语句中去掉。否则,您的z
将使table.begin()
递增到界外,从而导致UB,从而导致崩溃。此外,如果矢量为空,则不能删除begin,因此请将擦除放在if(table.begin()+z < table.end())
表达式中,这样可以在所有情况下防止崩溃。并使z
成为sortowanie
的局部变量。
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 正在处理故障(堆芯转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 分段故障核心转储,矢量嵌套在矢量中
- 分段故障核心转储矢量指针
- 为什么这个二维矢量会导致分段故障(磁芯转储)
- 从矢量范围创建矢量时的堆芯转储
- 分段故障(堆芯转储)-矢量
- STL矢量迭代器给出核心转储