这是我的代码:
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指出这一点。