Ich habe die Erklärung folgende Datenstruktur, auf dem ich die folgende Operation machen:Busfehler/Segmentierungsfehler für std :: vector <int> Erklärung
//QSweep.cpp
void QSweep:: createLoops(){
std:: vector<int> orientationUE;
if (test1)
orientationUE.push_back(1);
else
orientationUE.push_back(-1);
Alles funktioniert so weit in Ordnung. Das Problem ist, dass ich mehrere Dateien habe und ich will, dass orientUE eine Daten der Klasse QSweep nicht nur eine lokale Variable in der Methode createLoops() ist. So habe ich die Deklaration der Variablen orientationUE in der Datei QSweep.h
//QSweep.h
class QSweep{
....
std::vector<int> orientationUE;
....
}
//QSweep.cpp
void QSweep:: createLoops(){
if (test1)
orientationUE.push_back(1);
else
orientationUE.push_back(-1);
}
In diesem Fall erhalte ich entweder eine Bus Fehlermeldung oder eine Segmentierung Fehlermeldung je nachdem, wo ich in den
meine Variable orientationUE erklärtclass QSwepp{
....
}
Ich verstehe nicht genau, was passiert.
ADD: Ja habe ich mehrere Speicherzuweisung und mehrere andere Deklaration von Variablen des Typs Vektor (eigentlich viel). Z.B .:
typedef Seq< vector<int> > MxInt2d;
class QSweep
{
public:
QSweep(){};
QSweep(const MxDouble2d& myPoints, const MxInt2d& myEdges);
void intersection();
//data and functions for inserting the missing edges in the graph
void completeGraph();
MxInt2d myEFCG;
std::vector<int> vNoClone;
std::vector<int> vEdge;
....
int nbIntersections;
MxInt2d sweepEvents;
std::vector<double*> myIntersections;
};
Noch habe ich eine Menge von Algorithmen auf diese Datentypen angewendet und ich erhalte die Ergebnisse ohne keine Segmentierungsfehler oder Bus Fehlermeldung. Sie denken also, der Fehler liegt irgendwo in den anderen Speicherzuordnungsaufträgen. Uff .. Ich hatte davor Angst. Dennoch verstehe ich die guten Ergebnisse nicht, sie sind jedoch irreführend? Und wie kann ich in diesem Fall genau den Fehler erkennen?
ADD_NEXT:
Der Vektor myIntersections wird auf folgende Weise erstellt:
double* QSweep::computeIntersection(double m1, double b1, double m2, double b2){
double* v=new double[3];
v[0]= (b2-b1)/(m1-m2);
v[1]= (m1*b2-m2*b1)/(m1-m2);
v[2]=0.00;
return v;
}
double* QSweepComplete::findIntersection(edge_t edge1, edge_t edge2){
double* vector=NULL;
if (test2){
return NULL;
}
else{
vector=computeIntersection(m1,b1,m2,b2);
return vector;
}
}
void QSweep:: intersection(){
double* vector=NULL;
vector=findIntersection(edge1,edge2);
if (vector!=NULL){
myIntersections.push_back(vector);
}
}
Wenn ich der Vektor myIntersections alles zeigen in Ordnung ist, und dass ich immer die richtige Größe: wenn ich 5 haben Schnittpunkte, 5 Elemente im Vektor und so weiter. Für mich ist es sehr sauber aussieht, aber leider wahrscheinlich ist es nicht
ADD_LAST (MAYBE GELÖST) :(: Hey alle
Es scheint, das Problem war, die Daten
int nbIntersections;
die Ich initialisierte es nur lokal in einer Funktion in QSweep.cpp; Dennoch benutze ich viele Vektoren der gleichen Größe mit nbIntersections, so dass die Variable in einigen Fällen einige nicht vorhandene Daten enthielt .. Also habe ich den Konstruktor hinzugefügt und initialisiert es mit 0, und jetzt ist es Ich habe keine Probleme mehr mit den Segmentierungsfehlern oder Busfehlermeldungen. Ich hoffe, das war der Fehler.
Können Sie weitere Informationen zu diesem Satz bereitstellen: "Ich erhalte entweder eine Busfehlermeldung oder eine Segmentierungsfehlermeldung, je nachdem, wo ich meine Variablenausrichtung deklariert habe"? Ansonsten sehe ich nichts falsch mit dem Code. – Naveen
Wie werden myIntersections verwendet? Zeigen die Elemente auf einen anderen Vektor? –
Wie gehen Sie zum Löschen dieser Arrays von Doppel, die Sie zuweisen? –