受监视的命令转储了核心?



好吧,我经常被这个错误阻碍,受监控的命令转储核心。

这对我来说几乎是陌生的语言,因此我不可能听不懂编译器在说什么。

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

#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;
} 

但是我不明白我怎么能访问未分配的内存。

还有什么其他原因导致相同的错误如此频繁地发生。

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

你的索引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("Bummern");
return 1;
}
a[j] = i;
j += 1;
}
}
return 0;
}

访问越界数组会导致未定义的行为(谷歌该术语(。

您正在递增 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;
}

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

最新更新