Я пишу программу на C (я новичок в C), которая читает количество строк в файле, а затем сохраняет каждую строку в массиве в цикле.
while(1){
(...)
int lines = file_lines(path_to_file); // number of lines in the file
char *contents[lines]; // pointer creation
read_file(contents, lines, path_to_file); // read the contents of the file to the variable "contents"
(...)
}
ОднакоЯ заметил, что этот фрагмент кода ответственен за огромную утечку памяти (память увеличивается на 1% каждую секунду, пока я больше не могу использовать свой компьютер).
Полагаю, проблема в том, что я постоянно создаюновый char*
для содержания. Однако, поскольку количество строк в файле может варьироваться (я могу его редактировать), я не могу объявить эту переменную вне цикла while.
Что может быть возможным решением?
Если онополезно, это функция read_file
, и я бы предпочел решение, которое бы не требовало ее изменения:
void read_file(char *contents[], int lines, char *filename){
int j = 0;
size_t len = 0;
FILE *file = fopen(filename, "r");
for(j = 0; j < lines; j++){
contents[j] = NULL;
len = 0;
getline(&contents[j], &len, file);
}
fclose(file);
}