运行时检查错误#2

时间:2016-03-30 21:49:16

标签: c++

#include <string.h>

#include "BubbleSort.h"

void BubbleSort(char Str[])
{
    int     i;
    int     NumElements;
    bool    Sorted;
    char    Temp;

    NumElements = strlen(Str);
    do {
        Sorted = true;
        NumElements--;
        for (i = 0; i < NumElements; i++)
            if (Str[i] > Str[i + 1])
            {
                Temp = Str[i];
                Str[i] = Str[i + 1];
                Str[i + 1] = Temp;
                Sorted = false;
            }
    } while (!Sorted);
}
/////////////////////////////////////////////

#include <iostream>
#include "Bubblesort.h"

using namespace std;



void main() {
    int  Num; 
    char  Array[20]; 



    cout << "How many numbers would you like to enter?" << endl;
    cin >> Num;

    cout << "Enter your numbers:" << endl;
    for (int i = 0; i < Num; i++) 
    {
        cin >> Array[i];
    }


    cout << "Here are the numbers you entered:" << endl;
    for (int i = 0; i < Num; i++) 
    {
        cout << Array[i] << " ";
    }
    cout << endl << endl;

    BubbleSort (Array); 


        cout << "Here are your sorted numbers:" << endl;
        for (int i = 0; i < Num; i++)
        {
        cout << Array[i] << " ";
    }
    cout << endl;
}

////////////////////////////////////////////////////////

#ifndef BUBBLE_SORT_H
#define BUBBLE_SORT_H

void BubbleSort(char[]);

#endif

我收到运行时错误,指出Num已损坏。任何人都可以帮助查明我的代码中的问题吗?

由于

2 个答案:

答案 0 :(得分:0)

char Array[20]当您输入的Num大于20时,它会损坏。

更好地使用vectorpush_back

答案 1 :(得分:0)

一个错误是您在char数组上调用strlen,该数组不能保证以NULL结尾:

NumElements = strlen(Str);

因此NumElements具有未确定的值。

您需要:

1)传递要作为参数排序的实际字符数,以及数组并删除对strlen的调用:

BubbleSort(Array, Num);
//...
void BubbleSort(char Str[], int NumElements)

2)确保您传递的char数组为空终止