【发布时间】:2020-09-19 01:52:51
【问题描述】:
scanFolderPath - 包含文件的文件夹路径。
filesToScan - 带有文件名的字符串数组。
我对 realloc 行(for 循环中的第三行)有疑问。我不明白为什么!感谢您对程序员社区的帮助;)
char* filePath = malloc(0);
char* fileContent = 0;
char* partContent = 0;
FILE* fileToScan;
int i = 0, j = 0, virus = FALSE, flag = FALSE, counter = 0;
for (i = 0; i < amountOfFiles; i++)
{
flag = FALSE;
if (scanFolderPath != NULL && filesToScan[i] != NULL)
{
realloc(filePath, (sizeof(char) * (strlen(scanFolderPath) + 1 + strlen(filesToScan[i]))));
}
strcpy(filePath, "");
getFilePath(filePath, scanFolderPath, filesToScan[i]);
fileToScan = fopen(filePath, "rb");
readFile(&fileContent, filePath);
if (choice == '0')
{
virus = scanSingature(fileContent, virusSingature, getLength(fileToScan), virusSingatureLen);
if (virus)
{
printf("%s - Infected!\n", filePath);
fprintf(logsFile, "%s", filePath);
fprintf(logsFile, " Infected!\n");
}
else
{
printf("%s - Clean\n", filePath);
fprintf(logsFile, ("%s", filePath));
fprintf(logsFile, " Clean\n");
}
fclose(fileToScan);
strcpy(filePath, "");
}
}
【问题讨论】:
-
您正在丢弃
realloc返回的新指针值。您必须将其分配给指针变量。 -
谢谢!但最后当我添加“free(filePath)”时出现错误。
-
那是因为
filePath原来的值已经失效了。 -
...这是传递给
realloc的效果之一。 -
那么我怎样才能释放这个内存呢?
标签: c memory-management memory-leaks heap-memory realloc