Создание указателя в цикле на C-программе приводит к утечке памяти - PullRequest
0 голосов
/ 25 октября 2019

Я пишу программу на 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);
}
...