Brak zapisu do zmiennej składowej klasy

0

Czołem Bracia

Natrafiłem na problem tak arcycudaczny i godzący w podstawy programowania oraz logiki,że aż nie wiem jak poprawnie sformuować zapytanie do gógla o.O
Mianowicie,ot mam sobie klasę w .h

class SomeClass
{
   Q_OBJECT

public:
   void handleXmlTagsConfig(const QMap<QString, QString> &tagsReaded);

protected:
   QMap<QString, QString> mAliveTagsValues; ///stores values for DeviceXMLAliveTags(see the .cpp file for definition) obtained from device.xml;
   int test;
};

i .cpp

void SomeClass::handleXmlTagsConfig(const QMap<QString, QString> &tagsReaded)
{
   mAliveTagsValues = tagsReaded;
   test = 5;
}

i teraz cuda - sprawdzając pod debuggerem (VisualStudio 2012,Qt 4.7.3) linijkę przypisania do mapy wszystko wydaje się być OK,program się zatrzymuje i pokazuje puste mAliveTagsValues,a mapa tagsReaded zawiera 6 wpisów (klucz,wartość) tak jak powinna.Kiedy wykonam krok coś się [CIACH!],do mAlive... nie są przypisywane wartości,zaś podgląd stanu obiektu pokazuje,że wewnętrzne nody są zkoruptowane o.O
Identyczna sytuacja następuje,kiedy testowo do najzwyklejszego inta próbuję coś przypisać.

Podpowiedzcie,za czym góglować bo ciężko mi ten problem ubrać we frazę do wyszukiwarki.

0

W ogóle możesz to tak przypisać? W sensie mapę która jest const do pola które nie jest const?

Ale wracając do problemu: jesteś pewien że nie masz jakiegoś kwiatka z pamięcią wcześniej? Bo jeśli na przykład masz gdzieś jakiejś wyjście poza obszar twojej pamięci to może się tak zdarzyć że jakaś operacja spowoduje popsucie stosu / sterty i stąd może się tak dziać.

0

No więc sprawdzałem stos kiedy zatrzymuje mi się na breakpoincie i wygląda że jest OK,podgląd debuggera pokazuje "mAliveTagsValues = 0" rozwijając mam "raw data {d=0x535e1708 e=0x535e1708 } QMap<QString,QString>" - czyli ot zwykła pusta QMapa.
Kwiatek z pamięcią jest na pewno,bo po wykonaniu linijki przypisania raw data zmienia się w {d=??? e=???} czyli adresy trafia szlag...ale żeby było zabawniej program po puszczeniu go przez continue radośnie pomyka sobie dalej i ani myśli się wysypać.

1

A jesteś pewien że to nie działa poprawnie? Tzn co się stanie jak spróbujesz po przypisaniu coś z tej mapy wyciągać? Bo moze to debuger ćpa?

2

Ze tak spytam na wszelki wypadek - jestes pewny ze nie masz wlaczonej optymalizacji i masz poprawne symbole?

1
Shalom napisał(a):

A jesteś pewien że to nie działa poprawnie? Tzn co się stanie jak spróbujesz po przypisaniu coś z tej mapy wyciągać? Bo moze to debuger ćpa?

O ja pierdziu...linijki

void SomeClass::handleXmlTagsConfig(const QMap<QString, QString> &tagsReaded)
{
 mAliveTagsValues = tagsReaded;
 QMap<QString, QString> s = mAliveTagsValues;
 QString v = mAliveTagsValues.begin().value();
}

działają jak należy,czyli faktycznie mój debugger bierze jakiś towar :]
Po prostu LOL...

Dzięki Shalom!

1

Może być tak jak napisał @0x200x20 że masz włączone optymalizacje kompilatora i wtedy pod debuggerem w wersji step-by-step dzieją się takie cuda jak skoki w dziwne miejsca kodu i dziwne wskazania debuggera :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1