被监视的命令转储核心?

时间:2018-10-23 15:39:37

标签: c

好吧,我经常被这个错误所阻塞,被监视的命令转储了内核。

这对我来说是很陌生的语言,因此我无法理解编译器在说什么。

我查了一下互联网,可能是什么原因,结果发现我可能正在访问尚未分配内存的索引,因此我着手制作一个最简单的代码,并遇到了相同的错误。

#include<stdio.h>
int main()
{
    int n;
    int a[100000];
    scanf("%d",&n);
    int j=0;
    for(int i=2;i<=n;i+2)
    {   

        if (i%2==0)
            {   
                 a[j]=i;
                 j+=1;
            }
     }
     return 0;
} 

但是我不明白如何访问未分配的内存。

同样的错误如此频繁发生的其他原因是什么?

4 个答案:

答案 0 :(得分:2)

我认为问题可能出在您的for循环上,因为在第三部分中您没有更新i。要进行更新,请将其写为i = i + 2或i + = 2。

答案 1 :(得分:2)

您正在增加 i 的值。你写的是 i+2 而不是 i+=2。

#include<stdio.h>
int main()
{
    int n;
    int a[100000];
    scanf("%d",&n);
    int j=0;
    for(int i=2;i<=n;i+=2)
    {   

        if (i%2==0)
            {   
                 a[j]=i;
                 j+=1;
            }
     }
     return 0;
}

答案 2 :(得分:1)

您的索引j超出范围:

演示:

#include<stdio.h>
int main()
{
  int n;
  int a[100000];
  scanf("%d", &n);
  int j = 0;
  for (int i = 2; i <= n; i + 2)
  {
    if (i % 2 == 0)
    {
      if (j > 100000)      // <<<<<<<<<<<<<<
      {
        printf("Bummer\n");
        return 1;
      }
      a[j] = i;
      j += 1;
    }
  }
  return 0;
}

访问数组超出范围会导致不确定的行为(谷歌搜索该术语)。

答案 3 :(得分:0)

您正在写i + 2,但是您必须写i + = 2。