我将缓冲区作为文件中的长字符串。然后我将单词逐字添加到二叉树中作为节点。
如果我在不再使用缓冲区时尝试释放缓冲区,则会出现Segmentation故障。 Valgrind指出了很多“无效读取大小1”的错误。
如果我将它移到我的清洁支架上。它工作,但我得到严重的内存泄漏(因为该程序可以读取更多的文件)。
if (argc < 2) {
printf("No arguments was passed to proccess.\n");
return EXIT_SUCCESS;
} else {
for (int i = 1; i < argc; i++) {
FILE *file = openFile(argv[i]);
if (file != NULL) {
validFiles++;
// Get size of file and setting up a buffer
int fileSize = getFileSize(file);
buffer = calloc(fileSize + 1, sizeof(char));
fread(buffer,sizeof(char),fileSize,file);
fclose(file);
// Break down the buffer into a tree of nodes
pch = strtok (buffer,delimiters);
while (pch != NULL) {
root = insert(root, pch, argv[i], 1);
pch = strtok (NULL, delimiters);
} // free(buffer); should be here
}
}
}
if (validFiles > 0) {
searchBook(root);
freeTree(root);
free(buffer); // Only frees one of the buffers when multiple files are sent in
}
每个节点都会在树插入函数内为自己分配内存。