程序继续崩溃[项目欧拉#21]

时间:2014-05-10 03:10:53

标签: c++

我正在用C ++运行这个程序来查找10000以下所有友好数字的总和。是的,这是我Project Euler question 21的程序。我已经知道算法不是最有效的算法,我发布这个算法的原因与程序的效率无关。

代码:

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
  int sum = 0;
  int d[10000];
  for (int i = 0; i <= 9999; i++)
    d[i] = 0;
  for (int i = 1; i <= 9999; i++)
    for (int j = 1; j < i; j++)
      if (i%j == 0)
        d[i] += j;
  for (int i = 1; i <= 9999; i++)
    if (d[d[i]] == i)
      sum += i;
  cout << sum/2;
}

错误似乎发生在最后一个for循环中 - 我对它进行了评论并且一切正常(当然,除了明显错误的结果为0)。我得到的错误信息是

enter image description here

接着是:

----jGRASP exec: C:\Users\Sam\Documents\Project Euler\problem.exe

----jGRASP wedge2: exit code for process is -1073741819.
----jGRASP: operation complete.

现在,对于一个显而易见的问题 - 为什么会发生这种错误?

2 个答案:

答案 0 :(得分:2)

这一行

 if ( d[d[i]] == i)
由于d可能大于d[i]

将超出有效的索引范围9999。 将其更改为:

 if ( d[i] <= 9999 && d[d[i]] == i)

答案 1 :(得分:0)

如果d [i]的值大于10000,则d [d [i]]将是您已分配的10000个整数之外的参考。这会导致错误。