程序里有下面两个函数:
小文件没有问题,但是当文件达到1k行左右,会出现段错误。错误在第二个wlhile
语句的fgetc处。
void next(char c,int *row,int *col)
{
if(c == '\t')
*col = (*col + TABLEN - 1) / TABLEN * TABLEN + 1;
else if(c == '\n') {
cur_state.line_endpos[*row] = *col;
*col = 1;
(*row) ++;
}
else
(*col)++;
if(*col > cur_state.win_width)
{
cur_state.line_endpos[*row] = *col - 1;
*col -= cur_state.win_width;
(*row) ++;
}
}
void state_init()
{
char word;
int cur_row,cur_col;
cur_row = 1;
cur_col = 1;
fseek(FP,0,SEEK_SET);
ioctl(STDIN_FILENO,TIOCGWINSZ,&win);
cur_state.win_height = win.ws_row;
cur_state.win_width = win.ws_col;
while((word = fgetc(FP)) != EOF)
next(word,&cur_row,&cur_col);
cur_state.total_line =cur_row-1;
memset(&inbuffer,0,sizeof(inbuffer));
}
这个错误很奇怪,我在不断减少行数测试的时候发现在900 多行的时候程序恰好出错,但gdb调试时却正常,较多行时,gdb调试也会出错,何故?
想撞墙。。