2015-06-29 98 views
-2

我試圖運行下面的程序,但我得到一個錯誤信息分段錯誤(轉儲核心)

「段錯誤(轉儲核心)」

我的代碼:

#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); 

    } 

任何人都可以幫我找到我的代碼中的問題?

+5

在一個*調試器*中運行。 – WhozCraig

回答

2

在你的情況,

val[j]=ch; 

j結合的價值遞減,它可以去-已經和訪問無效內存這反過來又調用undefined behaviour

一般建議:請務必檢查您要使用的索引值的有效性。

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

char ch; 

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

是不是有很高的可能性,你可能會去val[-1]及以下,貌似這就是爲什麼你有段故障。

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

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

+0

非常感謝你......這是工作 –