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

C 尝试使用相同的缓冲区和文件指针从文件中重复读取行时出错,c,pointers,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++;

这是我的密码:

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循环中出现的次数。在第一次为缓冲区buf分配malloc空间之后,我只是将它与相同的文件指针一起传递给函数countTrans()

它编译正常,并运行大约10次迭代,直到出现以下错误:

getTrans(1516,0x7fff7885d300)malloc:**对象0x101b2d000的错误:未分配realloc'd指针
***在malloc\u error\u break中设置断点以进行调试
中止陷阱:6
我检查过其他类似的帖子,其中大多数都涉及使用realloc(),但我的代码没有。错误似乎发生在最后一次成功的countTrans()完成之后,以及countTrans()的新迭代开始之前。 我有内存泄漏问题吗

更新:

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

  size_t len = MAX_LEN;

问题解决了。感谢用户3121023指出这一点。

您正在调用
buf=(char*)malloc(MAX_LEN),但我在任何地方都看不到
free()
语句。你在叫它吗?@ryker是的,我在while循环外叫free(buf),在所有计数完成之后。@user3121023是的,这就解决了问题!我一直很粗心。谢谢您正在调用
buf=(char*)malloc(MAX_LEN),但我在任何地方都看不到
free()
语句。你在叫它吗?@ryker是的,我在while循环外叫free(buf),在所有计数完成之后。@user3121023是的,这就解决了问题!我一直很粗心。谢谢