free () - использование символа * перестает работать после sscanf () "? - PullRequest
0 голосов
/ 26 октября 2018

У меня проблемы с памятью. Проблема в том, что когда строка освобождается (free(line)), появляется

free (): неверный размер ошибки.

Из того, что я знаю, sscanf не изменяет строку, переданную в него. Как ни странно, free(line) внутри оператора if работает нормально. Я не уверен, в чем проблема, потому что я освободил char* как это в других частях моей программы без проблем, хотя и без вызова sccanf. Любая помощь будет оценена.

char* line;
read_line(read, &line, 0);
printf("%s\n", line); //gives "playinfoA/30"
char playerLetter[1];
char numberOfPlayers[2];
char temp[1];
if (sscanf(line, "playinfo%1s%1s%s", playerLetter, temp, 
           numberOfPlayers) != 3) {
    free(line);
    return -1;
}
//free(line);
return 0;

1 Ответ

0 голосов
/ 26 октября 2018

Если ваша проблема в том, что free (line) не работает, когда , если block не удается, тогда вы можете проверить, действительно ли line указывает на что-то.

Поскольку вы не инициализировали строку , которая является указателем на символ, единственная другая возможность заставить его указывать на какую-либо ячейку памяти - это вызов read_line .

Теперь я не уверен, что делает read_line , но попробуйте передать line вместо & line ?

...