我尝试运行以下程序,但收到错误消息


  “分段故障(堆芯)”


我的代码:

 #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/

10-13 04:12