小女学艺不精,想请教各位——

hi_hu 2001-08-16 10:41:30
本程序的目标是读取一文件指定起始位置和终止位置的段落。而该文件是已处理过的,它的每行都定长,为50个字符。
下面的模块能完成这个要求。但问题是当我要读取的段落超过一定的长度(比如1500*51个字节)时,它就报错:"segmentation fault (core dumped)"!———— 怎么办?
(请问这用远指针能解决吗?又怎么调试呢?)


#include <stdio.h>
# include <stdlib.h>

char * abstract(int lineStart, int lineEnd) /*参数是要读取文件的起始、终止位置*/
{
FILE * fp;
int i;
char * outer;
int lineNum;
lineNum = lineEnd - lineStart + 1;
outer = malloc(lineNum * 51 * sizeof(char));
if ((fp = fopen ("./est.esq.new","r"))==NULL)
{
printf ("cannot open est.seq.new\n");
}
fseek (fp, (lineStart - 1)*51l, 0);
fread (outer, lineNum * 51, 1, fp);
outer[lineNum * 51 ] = '\0';
fclose (fp);
return outer;
}


...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SCUM 2001-08-16
  • 打赏
  • 举报
回复
在 DOS 下,可以用 far 指针搞定这个问题。

不是长久之计。
flyingmouse 2001-08-16
  • 打赏
  • 举报
回复
段地址超限,远程指针也最多在4m内寻自,在dos只有640k内存可用。可以用扩展内存技术。
ed9er 2001-08-16
  • 打赏
  • 举报
回复
没有free内存会core dump?老兄这个玩笑开大了。。。

hama 2001-08-16
  • 打赏
  • 举报
回复
是在linux下吧,咳咳......

先看看是molloc出错还是函数使用者有没有free申请的内存呢(调用者必须释放你分配的内存)......

怎么看,咳咳......

你不会真是在linux下吧,如果是,用-g编译,core dump 你会得到一个大大的core,然后你gdb 程序名 core......

然后,keke......

你就知道哪一行出错了,还不清楚,info stack 看看函数的调用......
ed9er 2001-08-16
  • 打赏
  • 举报
回复
我很怀疑它能在段落不多的情况下能正常工作:
outer[lineNum * 51 ] = '\0'
越界了
malloc的时候加1

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧