变量的赋值如何自动更改?

时间:2013-12-05 09:39:28

标签: c++ visual-studio-2010 input cin

当我为std::cin >> diff;提供输入时,它接受输入值,当我输入数组的值时,diff变量值会被更改并设置数组的4th element的值。 请帮帮我哪里出错了。我试过fflush(std)。但它没有帮助我。

我正在使用Visual Studio 2010 Ultimate edition

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int i, num;//[]={0};
    int diff = 0;
    int numset[] = {0};
    int temp, cnt;
    cnt = num = i = 0;
    std::cout << "Enter your number and difference : ";
    //fflush(stdin);
    std::cin >> num ;
    std::cin >> diff;
    cout << "Enter array Elements : \n";
    for(i = 0; i < num; i++)
    {
        cin >> numset[i];
        //fflush(stdin);
    }
    for(i = 0; i < num; i++)
    {
        for(int j = i; j < num; j++)
        {

            if(i == j)
            {
                temp = numset[j];
            }
            else
            {
                if((diff == (numset[j] - temp)) || (((-1)*diff) == (numset[j] - temp)))
                {
                    cnt++;
                }
            }
        }
    }
    cout << cnt << endl;
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您正在超出数组numset的范围进行访问,因此您的代码具有未定义行为(UB),并且可能发生任何事情。它可以覆盖堆栈上的变量(就像你的情况一样),它可能会崩溃,它可以在线订购披萨。

numset被声明为单元素数组,因此访问numset[i] i > 0会导致UB。您应该将numset更改为std::vector<int>并使用push_back()向其中添加数字。