好吧,我经常被这个错误所阻塞,被监视的命令转储了内核。
这对我来说是很陌生的语言,因此我无法理解编译器在说什么。
我查了一下互联网,可能是什么原因,结果发现我可能正在访问尚未分配内存的索引,因此我着手制作一个最简单的代码,并遇到了相同的错误。
#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;
}
但是我不明白如何访问未分配的内存。
同样的错误如此频繁发生的其他原因是什么?
答案 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。