OSX 10.7, XCode 4.push_back Ausgabe std :: vector
Ich habe ein kleines Problem: Ich brauche eine 2D vector<vector<float>>
in zu einem 3D-Vektor, nach einem Prozess der Auswahl zurück zu drängen. Es löst den Fehler EXC_BAD_ACCESS in der Funktion push_back in der Schablone stl :: vector aus. Es scheint, dass es einfach sein sollte (ich habe schon oft mit komplexen Datenstrukturen gearbeitet), ich habe eine variierende Menge an Ideen ausprobiert, aber ohne Erfolg. Alles andere funktioniert und gibt die Werte aus, die ich von der Befehlszeile erwarten würde. Ich bin sicher, dass seine Code Blindheit und einige einfache Wiederholung zu übernehmen.
Ich frage nur, weil ich glaube, dass meine Syntax korrekt ist, aber zur Kompilierzeit habe ich Probleme. Heres Code einige Beispiel:
Umsetzung:
for(int i=0;i<fdisVec.size();i++){
int j;
if(fdisVec[i] < fdisVec2[i]){
j = 0;
}
else if(fdisVec2[i] < fdisVec[i]){
j = 1;
}
clusters[j].push_back(allMfccs[i]);
}
und meine .h hat die als solche (öffentliche Mitglieder der Klasse) deklarierten Objekte:
vector< vector <float> > allMfccs;
vector< vector < vector <float> > > clusters;
Im Fall hilft es, fdisVec und fdisVec2 sind auch 2d Vektoren, aber die "if else" Anweisung antwortet, wie ich es will - ich bezweifle stark, dass es etwas damit zu tun haben würde.
Wenn es sich um vecs von vecs von floats handelt, sollten Sie einen Matrixtyp wie boost :: numeric :: ublas :: matrix in Betracht ziehen. Es hat eine STL-ähnliche Schnittstelle. Versuchen Sie es mit .at() anstelle von [] und prüfen Sie, ob eine Ausnahme ausgelöst wird. – 111111
Was sind die Größen? Kann Ihnen der Speicher ausgehen? –
Wenn die Werte gleich sind, ist "j" unintialisiert. – hmjd