Привет, я строю проект, и сегодня после 500 строк кода я собираюсь застрелить себя. Сегодня я начал новый класс и некоторые очень странные вещи происходят:const char * const изменяется из-за строки (?)
class Target {
public:
Target(const int port);
virtual ~Target();
private:
const char* initialize_port(const int port) const;
const char *const port;
};
и CPP файл:
Target::Target(const int port)
:
port(initialize_port(port))
{
cout<<this->port<<endl; //this cout 80
string test3="Target2";//when i replace with char * test3="Target2" then both couts in the constructor are working ok.
cout<<this->port<<endl; //this cout Target2!!!!!!
}
const char* Target::initialize_port(const int port) const {
string port_str = std::to_string(port);
const char* port_char=port_str.c_str();
return port_char; // OR/and when i replace with something like return "80" then both couts in the constructor are working ok.
}
Target::~Target() {
}
Как вы можете увидеть в файле CPP, а конструктор по умолчанию вызывается его couts «this-> port», затем я создаю строку, а затем снова печатаю ее. Как можно получить другой ответ?
От NetBeans:
Target2
RUN FINISHED; значение выхода 0; в реальном времени: 20 мс; user: 0ms; Система: 0ms
PS: Когда в функции initialize_port (Const ИНТ порта) я даю стандартный возврат, например, возвращение "80"; все в порядке. Когда в конструкторе я заменяю строку char *, снова все в порядке.
PS2: Я знаю, что у меня есть проблемы с моей оперативной памятью. Если кто-то будет компилироваться, и нет проблем с выходами (cout), пожалуйста, дайте мне знать.
Заранее благодарен.
Если вы хотите сохранить строку, используйте 'string'. У вас есть висячий указатель и неопределенное поведение. –
Ничего важного для диагностики какого-либо конкретного вопроса здесь не было, извините! –
Я искренне надеюсь, что «и сегодня после 500 строк кода я собираюсь снимать себя» - это просто неправильный перевод? – villintehaspam