我尝试运行以下程序,但收到错误消息
“分段故障(堆芯)”
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include "serialsource.h"
int main()
{
FILE *pfile;
char *filename="/home/menen/DataFiles/t2.txt";
pfile=fopen(filename, "r");
if (pfile == NULL)
{
printf("Can not open the file /home/menen/DataFiles/t2.txt");
exit(1);
}
int i;
char ch;
char val[4];
for(i=0 ;i<10;i++)
{
int count=0, j=3;
ch=getc(pfile);
while (ch != '\n')
{
count++;
if (count>=62)
{
val[j]=ch;
printf("%c ", val[j]);
j--;
}
ch=getc(pfile);
}
putchar('\n');
}
fclose(pfile);
exit(0);
}
有人可以帮助我在代码中找到问题吗?
最佳答案
就你而言
val[j]=ch;
如果未绑定值减量为
j
,则它可以达到-
ve,并访问无效的内存,后者又调用undefined behaviour。一般建议:始终检查要使用的索引值的有效性。
也就是说,
getc()
返回一个int
值。有时,返回的值可能不适合char
。更改 char ch;
至
int ch = 0;
关于c - 分段故障(核心丢失),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31119202/