kishore kumar mishra Ответов: 2

Есть ли проблемы в этом коде?


константный тип char* добавление(константный тип char* S1, это константный тип char* С2) {
строка s(s1);
s += s2;
возвратить С. c_str();
}

пустота фу() {
const char* total = append("abc", "def");
}

Что я уже пробовал:

Пожалуйста, дайте мне знать, если есть какие-либо проблемы в этом коде?

Mehdi Gholam

Это работает?

[no name]

Это работает, но в этом есть какая-то ошибка, которую я не могу обнаружить.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Потому что масштаб о струне s находится только в пределах функции append. Как только эта функция вернется, будет вызван деструктор строк и освобождена память, содержащая символы. Это означает, что пространство, которое было занято, может быть немедленно перезаписано некоторыми другими данными.


Рейтинг:
15

KarstenK

Это ошибка действительно не очень хороший стиль чтобы вернуть указатель на освобожденный объект, когда область действия функции оставлена. В таком простом сценарии (класс string) это может сработать, но это неправильно. Некоторые деструкторы могут удалить этот указанный ресурс, и вы получите сбой.

Функция не имеет смысла, потому что операция может быть записана в строке.


CPallini

5. я бы назвал "ошибкой", такой "плохой стиль".

KarstenK

Конечно, вы правы. => исправлено