170 похожих чатов

Здравствуйте, есть вопрос: можно ли иначе проверить на валидность указатель?

вроде бы обычная проверка в итоге пропускает ошибку.
Объект proxy в том потоке, судя по отладчику, валиден, его удаления не производится ни до, ни после - почему же тогда proxy->type может крашить? Спасибо.
Есть структура:
struct proxyItem{
proxyItem();
proxyItem(QString, QString, QString, QString, QString);
proxyItem(const proxyItem&);
QString ip, port, type, user, pass;

bool operator==(const proxyItem&)const;
};

Есть функция, которая редко, но крашит, видимо на этапе proxy->type+":"
QString NetworkModel::proxyToString(proxyItem *proxy, bool flag) const
{
QString result;
if(proxy){
result = (flag)?"":proxy->type+":";
result += proxy->ip + ":" + proxy->port + ":" + proxy->user + ":" + proxy->pass;
}
return result;
}

Конкретно последняя точка была в QString t(s1):
inline QT_ASCII_CAST_WARN const QString operator+(const QString &s1, const char *s2)
{ QString t(s1); t += QString::fromUtf8(s2); return t; }

Кусок стека:
Qt5Core.dll!QString::QString(const QString & other)Строка 525 C++ Символы загружены.
> app.exe!operator+(const QString & s1, const char * s2=0x00d21964)Строка 1534 C++ Символы загружены.
app.exe!NetworkModel::proxyToString(proxyItem * proxy=0x05f989d8)Строка 456 C++ Символы загружены.
app.exe!NetworkModel::data(const QModelIndex & index={...}, int role=0)Строка 38 C++ Символы загружены.

9 ответов

13 просмотров

Не удаляй proxy пока не закончишь с ним работу

Dmitry-Shulga Автор вопроса
Kirill Bolshakov
Не удаляй proxy пока не закончишь с ним работу

он не удаляется совершенно точно, деструктор сработает только при завершении программы. Может тут со стеком проблема или еще в чем-то?

Проверить указатель на валидность невозможно. Есть только одно значение указателя, гарантированно невалидное — nullptr

А чё у тебя все переменные — STRING ?

Ilya Zviagin
Проверить указатель на валидность невозможно. Есть...

Напомни, пожалуйста, то что nullptr - это гарантированно невалидное состояние - сказано где-то в стандарте? (Не сарказм. Просто по моей логике 0 - вполне валидный адрес, если мы живём в "реальном режиме" на голом железе)

🐈
Напомни, пожалуйста, то что nullptr - это гарантир...

По стандарту nullptr – одно из возможных, отдельное значение указателя. Невалидное тоже стоит особняком

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
3
Карта сайта