Free () - char * перестает работать после sscanf () "?

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

free(): invalid size error.

Насколько мне известно, 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;
"%1s" требует массива длиной 2, например char temp[2];
user3386109 26.10.2018 09:07

Относительно комментария @ user3386109, numberOfPlayers[2] недостаточно велик, чтобы вместить "30".

Michael Burr 26.10.2018 09:16
2
2
56
1

Ответы 1

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

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

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

Другие вопросы по теме