Я пишу какой-то ужасный, ужасный код, и мне нужен способ поместить free () в середину оператора. Фактический код:
int main(){
return printf("%s", isPalindrome(fgets(malloc(1000), 1000, stdin))?"Yes!\n":"No!\n") >= 0;
// leak 1000 bytes of memory
}
Я использовал alloca (), но я не уверен, что это действительно сработает на моем целевом компьютере. Моя проблема в том, что free возвращает void, поэтому мой код содержит следующее сообщение об ошибке:
error: void value not ignored as it ought to be
Очевидная идея, которая у меня была:
int myfree(char *p){
free(p);
return 0;
}
Что приятно, так как делает код еще более нечитаемым, но я бы предпочел не добавлять другую функцию.
Я также кратко попытался трактовать free()
как указатель на функцию, но я не знаю, сработает ли это, и я недостаточно знаю о C, чтобы сделать это правильно.
Примечание: я знаю, что это ужасная идея. Не пытайтесь делать это дома, дети.
РЕДАКТИРОВАТЬ: Большое спасибо, ребята, я получил это, изменив мою однострочную isPalindrome()
функцию на это:
return (...)?(calls == 1?free(pLeft),1:1):(calls == 1?free(pLeft),0:0);
(вызовы отслеживают глубину рекурсии)
Нет больше утечек памяти!