好吧,我经常被这个错误阻碍,受监控的命令转储核心。
这对我来说几乎是陌生的语言,因此我不可能听不懂编译器在说什么。
我查找了互联网,可能是什么原因,发现我可能正在访问尚未分配内存的索引,因此我开始制作最简单的代码并遇到相同的错误。
#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+2
或i+=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。