В общем проблема следующая. Все выполняется на linux 64 bit, есть сторонняя библиотека с функцией, которой аргументом передается некая структура. Одно из полей этой структуры типа
C++ (Qt)
char *
.
Для наглядности приведу два упрощенных класса, которые отражают различия в поведении при различном присваивании значения полю структуры.
C++ (Qt)
class MyClass{
private:
QString* m_str;
public:
MyClass(const QString& str){
m_str = new QString(str);
}
void execute(){
THIRDPARTYSTRUCT s;
s.member = m_str->toAscii().data(); // <-------------- See here
qDebug(third_party_function(s));
}
}
class MyClass2{
private:
QString* m_str;
public:
MyClass2(const QString& str){
m_str = new QString(str);
}
void execute(){
THIRDPARTYSTRUCT s;
s.member = "test"; // <-------------- See here
qDebug(third_party_function(s));
}
}
MyClass *c = new MyClass("test");
MyClass2 *c2 = new MyClass2("test");
c->execute(); // executed with error
c2->execute(); // executed ok
Необходимо, чтобы работал MyClass.
Смотрел память в отладчике. Адреса, конечно, в первом и во втором случае разные, но значения по ним совпадают. Подскажите, в чем может быть проблема.