FILE *fp;
char *in;
char *sa[20];
char inn[100];
//other stuff here
for(huge loop) {
fp = popen(filename, "r");
fscanf(fp, "%100s", inn);
in = strtok(inn, "=");
i = 0;
while(in != NULL) {
sa[i++] = in;
in = strtok (NULL, "=");
}
}
这会在我的linux机器上编译并运行大约4分钟,因为它会对大量数据文件进行排序,然后进行分段错误。它正确运行直到这一点,并且该点根据我做了多少而改变,因此我强烈怀疑内存泄漏并且我应该释放指针。但我想没有malloc
编译器会自动分配并释放指针内存。我做错了什么?
感谢。
答案 0 :(得分:2)
您在inn
数组中没有空余的空终结符。
每个pclose
都没有popen
。
您不会检查popen
的返回值。
无法保证您不会溢出sa
数组。