2016-10-31 18 views
0

Ich habe Fehler in Valgrind: in Kürze - Bedingter Sprung oder Bewegung hängt von nicht initialisierten Wert (s) (insgesamt 113 Fehler fast der gleiche Typ) Problem in diesem Teil des Codes (Zeile wo ich in der Karte einfügen):Valgrind Fehler beim Einfügen in die Karte

in Header-Datei:

AVLclass<int,char>*ptr1; 
map<int,AVLtclass<int,char>*>check1; 

in CPP-Datei:

string data, number, order, id, token; 
int number_i,number_i2, id_i, order_i, data_i; 
float number_f2; 
char data_c[2]; 
vector <string> record; 
istringstream ss(line); 
//separate number (looks for commas) 
while (getline(ss, token, ',')) 
{ 
    record.push_back(token); 
} 

id  = record[0]; 
order = record[1]; 
data = record[2]; 
number = record[3]; 
id_i = atoi(id.c_str()); 
order_i = atoi(order.c_str()); 
data_i = atoi(data.c_str()); 
number_i = atoi(number.c_str()); 

if (data_i == 0 && number_i == 0) 
{  
    ptr1 = new AVLclass<int,char>; 
    ptr1->setId(id_i); 
    ptr1->setOrder(order_i); 
    ptr1->setData(data_i); 
    ptr1->setNumber(number_i); 
    check1.insert(pair<int,AVLclass<int,char>*>(id_i,ptr1)); 
} 

Wenn ich versuche, statt ID_i tatsächliche ganze Zahl zu verwenden, ich habe 60 Fehler statt 113. Aber ich sehe keine Werte, die nicht initialisiert sind. Ich habe viele verschiedene Möglichkeiten ausprobiert, um diese Karte einzufügen, aber es funktioniert nicht.

+1

Was ist data_i und number_i? –

+0

Ich habe den gleichen Zweifel. Vielleicht wurde einer von data_i oder number_i nicht initialisiert? –

+0

Ich habe einen Code hinzugefügt – Nik

Antwort

0

Bitte verwenden Sie std :: stoi anstelle von atoi. Es wird Fehler verwalten, wenn zum Beispiel das Ergebnis in Datensatz [0] falsch ist. (Und Valgrind sollte Ihnen die Position Ihres Fehlers mitteilen).

+0

Ich kann nicht C++ 11, nur 98 ((Wie sonst kann ich es beheben? – Nik

+0

Überprüfen Sie den Inhalt des Datensatzes nach Ihrer Schleife. –

+0

nicht leer, zum Beispiel Datensatz [0] enthält ID-Nummern aus der Eingabedatei – Nik