尝试使用相同的缓冲区和文件指针重复读取文件中的行时出错

时间:2015-11-25 18:15:54

标签: c pointers

这是我的代码:

int countTrans(FILE *fp, char *buf, int sesid){
  char str[10];
  int count = 0;
  size_t len;

  sprintf(str, "A%d:", sesid);
  while(-1 != getline(&buf, &len, fp)){
    if('T' == buf[0]){
      if(strstr(buf, str))
        count++;
    }
  }
  return count; 
}


int main(int argc, char **argv){
  FILE *ifp, *ofp;
  char *buf;
  size_t len;
  int count = 0, i = MAX_RAND;  // MAX_RAND = 200
  ...
  if(!(ifp = fopen(argv[1], "r"))){
    fprintf(stderr, "Can't open input file %s. Exit\n\n", argv[1]);
    exit(1);
  }
  buf = (char *)malloc(MAX_LEN);

  while(i){
    countTrans(ifp, buf, rand() % MAX_TRANS);
    i--;
    rewind(ifp);
  }
  ...

我的目的是获取一个随机会话ID,在文本文件中搜索该会话ID,并在一个重复200次的while循环中计算它出现的次数。在第一次使用malloc空间作为缓冲区buf后,我只是继续将它传递给函数countTrans()以及相同的文件指针。

它编译好,并运行大约10次迭代,直到我收到此错误:

getTrans(1516,0x7fff7885d300) malloc: *** error for object 0x101b2d000: pointer being realloc'd was not allocated

*** set a breakpoint in malloc_error_break to debug

Abort trap: 6

我已经检查了其他类似的帖子,其中大多数涉及使用realloc(),但我的代码没有。似乎错误发生在上一次成功的countTrans()完成之后和countTrans()的新迭代开始之前。 我是否遇到内存泄漏问题?

更新:

这是一个粗心的错误。我忘了在countTrans()里面初始化len,它应该是:

  size_t len = MAX_LEN;

问题解决了。感谢user3121023指出这一点。

0 个答案:

没有答案