вроде бы обычная проверка в итоге пропускает ошибку.
Объект 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++ Символы загружены.
Не удаляй proxy пока не закончишь с ним работу
он не удаляется совершенно точно, деструктор сработает только при завершении программы. Может тут со стеком проблема или еще в чем-то?
Проверить указатель на валидность невозможно. Есть только одно значение указателя, гарантированно невалидное — nullptr
А чё у тебя все переменные — STRING ?
what's wrong?
Напомни, пожалуйста, то что nullptr - это гарантированно невалидное состояние - сказано где-то в стандарте? (Не сарказм. Просто по моей логике 0 - вполне валидный адрес, если мы живём в "реальном режиме" на голом железе)
По стандарту nullptr – одно из возможных, отдельное значение указателя. Невалидное тоже стоит особняком
Обсуждают сегодня