实现插入排序时出现分段错误
Segmentation fault when implementing insertion sort
#include <iostream>
using namespace std;
int main(){
int a[6] = {5, 2, 4, 6, 1, 3}; // create an array of size 6
int j, key = 0;
for (int i = 1; i < 6; i++) {
key = a[i];
j = i - 1;
while ((j >= 0) && (a[j] > key)) {
a[j + 1] = a[j];
j -= 1;
}
a[j + 1] = key;
}
for (int l = 0; l < 6; l++) {
cout << a[l];
}
return 0;
}
我正在尝试使用数组测试我的插入排序代码代码符合要求,但当我尝试执行.out文件时,它给了我"分段错误",我查了一下分段错误是什么,这基本上是一个错误,我们试图访问被禁止的内存位置,然而,我想知道我的代码中的错误到底在哪里此外,如果我去掉
for (int l = 0; l < 6; l++) {
cout << a[l];
}
没有发现错误。
您的变量j
未初始化,因此在您第一次访问a[j]
时可能是任何变量。这会导致分段错误。(int j,key =0;
仅将key
设置为0
,而不设置j
。(
始终使用-Wall
编译代码,这会告诉您未初始化变量的使用情况。(更正:我的gcc 4.7没有抓住它。太差劲了。(
(当您删除打印时,错误消失的原因是您启用了编译器优化:然后编译器会注意到您从未对计算值和数组做过任何实际操作,只是将所有内容都放入bin中,并给您一个空程序。(
排序是stl中的算法之一。你真的应该像一样使用std::
std::sort( a, a+6 );
PS:j在行中使用前初始化
j = i - 1;
所以这并不是造成车祸的原因。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?