【问题标题】:User defined array and Bubble Sort in C++C ++中的用户定义数组和冒泡排序
【发布时间】:2021-11-24 02:28:58
【问题描述】:

此代码是关于获取用户输入的数组大小、数组值,并且此代码使用冒泡排序对数组进行排序。 这段代码有什么问题?我遇到了分段错误。

#include<iostream>
using namespace std;
int main(){
    int arr[40];
    int n;
    cout<<"Enter the size of array: \n";
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    for(int i=0;i<n;i++){
        cout<<"Entered value for array before sorting is "<<arr[i]<<"\t";
    }
    int counter = 1;
    while(counter < n){
        for (int i=0;counter<n;i++){
            if(arr[i]>arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        counter++;
    }
    for(int i=0;i<n;i++){
        cout<<"sorted array is "<<arr[i]<<"\t";
    }
}

 

【问题讨论】:

  • 一件事立刻引起了我的注意——你的arr 的大小固定为40,但你输入n 并将其视为大小。如果 n>=40,您将溢出数组。
  • 是的,我正在设置限制

标签: c++ sorting bubble-sort


【解决方案1】:

你的问题来自这里for (int i=0;counter&lt;n;i++){,因为你没有在for循环中修改计数器,这意味着counter &lt; n总是正确的。 这意味着i 的大小将始终增加,超过n,并溢出触发分段错误的数组。

我想你的意思是for (int i=counter;i&lt;n;i++){

您的编译器可以提示您有问题,我不知道您是如何编译的,但您可以增加收到的警告数量。如果您从终端使用gccclang,一个好的开始方法是添加-Wall -Wextra

【讨论】:

  • 非常感谢,但for (int i=counter;i&lt;n;i++){ 不是我要找的。我用for (int i = 0;i&lt;n-counter;i++){ 修复了这个问题,我的代码似乎可以工作
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 2013-09-28
  • 2020-09-13
相关资源
最近更新 更多