运行时检查失败#2堆栈周围的“数字”已损坏

时间:2013-12-01 00:39:44

标签: c++

程序执行并输出已排序的数组,但程序崩溃。请帮助我理解为什么以及如何解决。 win7上的语言和环境是c ++和VS.

//test for ordering  numbers
#include <iostream>

using namespace std;

int main()
{
    int numbers[3];

    numbers[0] = 33;
    numbers[1] = 13;
    numbers[2] = 23;

    int i = 0;
    int temp = 0;

    for(int i = 0; i < 3; i++)
    {
        if(numbers[i] > numbers[i+1])
        {
            temp = numbers[i];
            numbers[i] = numbers[i+1];
            numbers[i+1] = temp;    
            temp = 0;

        }
    }
}

2 个答案:

答案 0 :(得分:1)

for循环中,当i为2时,您正在访问numbers[3] out of range访问权限。

请记住,当您声明int numbers[3]时,您声明了一个包含3个元素的数组:numbers[0]numbers[1]numbers[2]

答案 1 :(得分:0)

通常,冒泡排序如下所示:

for(int x=0; x< n; x++)
{
    for(int y=0; y< n-1; y++)
    {
        if(numbers[y]>numbers[y+1])
        {
            int temp = numbers[y+1];
            numbers[y+1] = numbers[y];
            numbers[y] = temp;
        }
    }
}

在您的情况下,只需要一次交换,因此您不需要外部循环。但是,如果需要多次交换,则需要外部循环。例如:

int numbers[7];

numbers[0] = 33;
numbers[1] = 53;
numbers[2] = 23;
numbers[3] = 4;
numbers[4] = 23;
numbers[5] = 10;
numbers[6] = 25;

int n = 7;

// Without this outer loop
// Output: 33 23 4 23 10 25 53
// With outer loop
// Output: 4 10 23 23 25 33 53
for (int x= 0; x < n; x++) {
    for(int y=0; y< n-1; y++)
    {
        if(numbers[y]>numbers[y+1])
        {
            int temp = numbers[y+1];
            numbers[y+1] = numbers[y];
            numbers[y] = temp;
        }
    }
}

for (int i = 0; i < 7; i++)
    std::cout << numbers[i] << " ";