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是的,这就解决了问题!我一直很粗心。谢谢