Vermeidung string iterator not derefencable



  • Hallo,

    wie vermeide ich am sichersten den Laufzeitfehler "string iterator not derefencable" ?

    Ich glaube das beim Deserialisieren meines Transferobjektes etwas schief geht, aber ich tue mir relativ schwer zu erkennen wo der Fehler liegen könnte.

    Zur Erklärung ich setze jsoncpp ein

    //Umwandlung von JSON
    if(jsonValue.isMember("properties")){					
    			Json::Value propertiesValue(jsonValue.get("properties", DUMMY_VALUE));
    			for (Json::Value::iterator entry = propertiesValue.begin();
    				entry != propertiesValue.end(); entry++)
    			{
    				Json::Value key = entry.key();
    				Json::Value value = propertiesValue[entry.key().asString()];
    
    				if(value.asString() != ""){
    					tempProperties[key.asString()]=value.asString();
    				}
    			}
    			adapterSpec.setProperties(tempProperties);
    		}
    
    //Umwandlung nach JSON
    Json::Value propertiesValue(Json::objectValue);
    		for (std::map<std::string, std::string>::iterator entry = properties.begin();
    				entry != properties.end(); entry++)
    		{
    			//int in std::string konvertieren
    			std::ostringstream osstream;
    			osstream << entry->first;
    
    			std::string keyValue = osstream.str();
    
    			if(entry->second != ""){
    				propertiesValue[keyValue]=entry->second;
    			}
    		}		
    		value["properties"]=propertiesValue;
    


  • Gehe doch mal mit 'nem Debugger durch, und gucke in welcher Zeile das Ding aussteigt.



  • Tachyon schrieb:

    Gehe doch mal mit 'nem Debugger durch, und gucke in welcher Zeile das Ding aussteigt.

    Das Problem ist ja das ich
    a) Nebenläufigkeit habe
    b) korrupten Callstack
    c) die Stelle nicht genau lokalisieren kann

    In einem Thread läuft er hier noch und in einem anderen scheinbar kracht es. Das Debuggen der Nebenläufigkeit macht mir hier zu schaffen.



  • blubberblase2 schrieb:

    In einem Thread läuft er hier noch und in einem anderen scheinbar kracht es. Das Debuggen der Nebenläufigkeit macht mir hier zu schaffen.

    Dafür kannst Du Haltepunkte setzen. Setze einen Haltepunkt vor die Stelle, an der Du das Problem vermutest und lass das Programm normal laufen. In dem gezeigten Code werden auch nirgends unmittelbar string-Iteratoren benutzt. Wie soll man dazu also was sagen?
    Grundsätzlich scheinen mir aber einige Konstrukte fragwürdig zu sein. Der Teil zum Beispiel:

    //int in std::string konvertieren
                std::ostringstream osstream;
                osstream << entry->first;
    
                std::string keyValue = osstream.str();
    

    Der Key ist doch schon ein String. Wozu "konvertierst" Du ihn noch?


Anmelden zum Antworten