簡體   English   中英

分段錯誤(轉儲核心)

[英]segmentation fault (dumped core)

我嘗試運行以下程序,但收到錯誤消息

“分段錯誤(轉儲核心)”

我的代碼:

 #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 ,它可以去-已經和訪問無效內存這反過來調用不確定的行為

一般建議:始終檢查您要使用的索引值的有效性。

也就是說, getc()返回一個int值。 有時,返回的值可能不適合char 改變

 char ch;

int ch = 0;
        if (count>=62)
        {
          val[j]=ch;
          printf("%c ", val[j]);
          j--;
        }

是不是很有可能你會去val[-1]及以下,看起來這就是你有分段錯誤的原因。

if(j>=0)
{
  val[j] = ch;
  j--;
}

通過檢查如上所示,確保您沒有數組越界訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM