我在尝试使用 C 以数字方式绘制几个圆圈时遇到了一个看起来很奇怪的问题。
似乎正在发生的是代码的打印部分按预期工作。它打印出数组中的每一项。错误恰好在最后出现 - 在打印出最后一项后,终端立即抛出段错误。
经过一些测试后,我得出结论,每当我尝试打印出数组中的一个元素时都会发生这种情况,无论我是打印出完整的元素还是其中的一部分。我什至尝试只打印出数组的第一“行”——它很好地返回了该行,但之后又抛出了同样的错误。
我是 C 的完全初学者,但怀疑问题出在我的数组中覆盖了空终止符。无论情况是否如此,我都不确定如何解决此问题。有什么建议吗?
#include <stdio.h>
#define EW 707
#define EH 600
int ec[EH][EW][3] ;
int main(void)
{
int y , x , blah ;
char arr[80] ;
FILE* fin ;
fin = fopen( "input.ppm" , "r" ) ;
fscanf( fin , "%s" , arr ) ;
fscanf( fin , "%d" , &blah ) ;
fscanf( fin , "%d" , &blah ) ;
fscanf( fin , "%d" , &blah ) ;
for( y = 0 ; y < EH ; y++ )
{
for( x = 0 ; x < EW ; x++)
{
fscanf( fin , "%d" , ec[y][x] + 0 ) ;
fscanf( fin , "%d" , ec[y][x] + 1 ) ;
fscanf( fin , "%d" , ec[y][x] + 2 ) ;
}
}
close( fin ) ;
for(y = 0; y < EH; y++)
{
for(x = 0; x < EW; x++)
{
for(blah = 0; blah < 3; blah++)
{
printf("%d %d %d \n", y, x, blah);
printf("%d \n", ec[y][x][blah]);
}
}
}
最佳答案
您的代码似乎可以正常工作。
我看到的唯一“奇怪之处”是您在fin
上使用close
而不是fclose
,它可能会导致问题。此外,它表明您没有在启用所有警告的情况下运行编译器。
如果您不能更好地查明问题的根源,请尝试在 valgrind
下运行可执行文件。我做了,但手边没有 PPM,我用固定值的赋值替换了所有读取;尝试做同样的事情(例如,将所有像素分配给 0),如果这“解决”了问题,那么就是您的文件格式中的某些东西导致了问题。
关于c - 数组段错误结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922327/