typedef char* string;
int func1(string s);
char* func2(); // returns a new memory/
if(func1(func2()) == 4)
{
// code
}
Предполагая, что func2() требуется только в состоянии. Так как мне нужно освободить вновь выделенную память, как я могу освободить ее в пределах одной строки (т. Е. С тем же условием или paranthesis)? Мой мотив для этого - сохранить код чистым.c - назначение смешивания и свободный() в состоянии?
EDIT 1. Да, это вопрос c. Использование типа «string» было ошибкой с моей стороны, поскольку я всегда набирал его на char *. Извините за путаницу.
Не делайте этого. Не ставьте сложную задачу в условие if. Это ущемляет ясность, удобочитаемость и ремонтопригодность. –
это ни в коем случае не «чистый». Эмпирическое правило состоит в том, что когда функция выделяет память и возвращает указатель, вызывающий контекст должен отвечать за освобождение, что означает сохранение указателя как переменной. И является ли тип 'string' символом * typedef? – SirDarius
Вызов функции, которая выделяет такую память, никогда не бывает чистой. Если вы используете C++ (как предполагает использование 'string'), сделайте что-то вроде' char * temp = func2(); std :: string temp2 (temp); free (temp); 'и используйте' temp2' в 'if'. – filmor