内存泄漏的 C 问题(realloc 函数)



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 - Cleann", filePath);
fprintf(logsFile, ("%s", filePath));
fprintf(logsFile, "  Cleann");
}
fclose(fileToScan);
strcpy(filePath, "");
}
}

试试

filePath = realloc(filePath, (sizeof(char) * (strlen(scanFolderPath) + 1 + strlen(filesToScan[i]))));

这样,将重新分配文件路径的内容,并将指针返回到文件路径

realloc 返回新的分配块。您不分配任何内容,因此重新分配的内存将丢失,并且指针指向假定 realloc 成功的无效内存(。

重新分配的正确方法:

void *p = malloc(10);
void t;
/* ... */
t = realloc(p, 20);
if(t) p = t;            //check if the realloc was successful 
/* ... */
free(p)

最新更新