2017-10-15 27 views
-1

我计算数字的发生,结果是准确的,右:使用数组和运行时检查失败#2-S,Visual Studio的C++

#include <iostream> 
using namespace std; 
const int max = 51; 

int main() 
{ 
    int num = 0; 
    int array[max] = { 0 }; 
    cout << "Enter interger number from 0 to 50 and type in -1 to show occurence:"; 
    while (num!=-1) 
    { 
     cin >> num; 
     array[num] = array[num]+1; 
    } 
    cout << "all entered number are:" << endl; 
    cout << "Number\tFrequency" << endl; 
    for (num = 0; num < max; num++) 
    { 
     if (array[num]>0) 
     { 
      cout << num <<"\t"<< array[num] << endl; 
     } 
    } 
    return 0; 
} 

为什么在Visual Studio总是通知我的以下:

运行时检查失败#2-S,

enter image description here

+0

“运行时检查失败#2-S”并不意味着任何东西最多的人。请包括一个确切的错误信息,并通过调试来向我们展示您发现的内容。另外,显示导致问题的输入,以便重现,或者更好地将输入硬编码到程序中。 – chris

+2

你永远不会检查'num'是否超出界限:'array [num]'。 – user0042

+0

如果用户输入的任何数字大于50或小于0,则表示您超出范围。 '-1'超出了'array [num] = array [num] +1;' – drescherjm

回答

0

num变量变为-1时,您正在访问数组元素超出范围(array[-1]),从而调用undefined behavior,这会导致堆栈损坏。如果您接受大于50的输入,则会发生同样的情况。确保num变量保持在0..50边界内。引入另一个变量来控制逻辑和while循环:

int controlvar = 0; 
int num = 0; 
int array[max] = { 0 }; 
std::cout << "Enter integer number from 0 to 50 and type in -1 to show occurence: "; 
while (controlvar != -1) 
{ 
    std::cin >> controlvar; 
    if (controlvar >= 0 && controlvar <= 50){ 
     num = controlvar; 
     array[num] = array[num] + 1; 
    } 
} 
+0

所以如果我仍然想使用数组,我的端点是-1,有没有解决方案? –

相关问题