-1
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    srand(time(NULL));
    int sizer = (rand() % 15) + 2;
    int nenad[sizer];
    for (int i = 0; i < sizer;i++)
        nenad[i] = (rand() % 15) + 1;
    for (int i = 0; i < sizer;i++)
        cout << nenad[i] << endl;
    for (int i = 0; i < sizer;i++)
    {
        for (int j = i + 1;i < sizer;j++)
        {
            if (nenad[i] > nenad[j])
            {
                int temp = nenad[i];
                nenad[i] = nenad[j];
                nenad[j] = temp;
            }
        }
    }
    cout << "The biggest elements are : " << nenad[sizer-1] << " and " << nenad[sizer-2] << endl;

该程序将随机数量的随机数添加到数组中。当它们被输出时,程序崩溃了。为什么?

4

2 回答 2

9

你的循环结束条件似乎很好奇,我想

for (int j = i + 1;i < sizer;j++)

真的应该

for (int j = i + 1;j < sizer;j++)
于 2013-07-23T19:11:57.437 回答
3

你的循环条件也被打破了。应该比较 j < sizer。

for (int i = 0; i < sizer;i++)
{
    // we don't check j here
    for (int j = i + 1;i < sizer;j++)
    {
        //j can exceed the size of nenad and read from a bad address
        if (nenad[i] > nenad[j])
        {
            int temp = nenad[i];
            // same as above
            nenad[i] = nenad[j];
            // or write to a bad address
            nenad[j] = temp;
        }
    }
}

您应该真正考虑使用/做的另一件事是使用valgrind。当我们的眼睛看不到时,它会为您捕捉到这一点。

于 2013-07-23T19:14:08.070 回答