Ich arbeite an der Implementierung eines Divide-and-Conquer-Algorithmus, der die beiden am nächsten zueinander liegenden Punkte und den Abstand zwischen ihnen ermittelt. Meine endgültige Lösung findet die richtige Antwort (verglichen mit der Verwendung von Brute Force), aber etwa 1/3 der Zeit würde einen Segmentierungsfehlerfehler zurückgeben. Ich arbeite seit ein paar Tagen daran, dieses Problem zu beheben, indem ich hier und da Druckanweisungen hinzufüge, aber das Problem nicht finden konnte. Ich würde es begrüßen, wenn sich jemand meinen Code ansehen würde.Rekursive Funktion gibt gelegentlich einen Segmentierungsfehler zurück
Antwort
Ihre "divide" -Schleife geht davon aus, dass X
und Y
die gleiche Anzahl von Elementen haben. Wenn Y
weniger als X
hat, werden Sie auf undefiniertes Verhalten stoßen, was lustige Ergebnisse oder einen Absturz sein könnte.
Eine Lösung vielleicht vorschlagen? nur ein paar Zeilen ersetzt werden, ihre kommentierte Ersatz (warum notwendig) –
Das macht Sinn. Ich habe versucht, die Schleife in zwei zu teilen: eine für "Y" mit der Bedingung "i
Versuchen Sie, Ihre Zugriffsmethode für die Vektoren zu ändern. Der Vektor-Subscript-Operator scheint in einigen Compilern/Plattformen (zumindest aus meiner Sicht) ein gegenständliches Verhalten zu haben. Ich denke, das Problem kommt davon, dass es eine verkettete Liste ist, die dazu führt, dass sie im Speicher nicht zusammenhängend ist, aber das ist nur eine Vermutung. (EDIT: std :: vector im Speicher zusammenhängend ist, ist das Problem etwas anderes) Versuchen Sie Iteratoren statt (easy-peasy mit auto
Schlüsselwort), wie zum Beispiel mit:
for (auto iter = Yprime.begin(); iter != Yprime.end(); iter++) {
// Your code here
}
Hoffnung das funktioniert für Ihren Fall!
Habe gerade meinen Post darüber bearbeitet, deinen Kommentar danach gesehen. Das tut mir leid. Obwohl ich ausdrücklich gesagt habe ** "aber das ist nur eine Vermutung" **. Du irrst also ein bisschen, dass ich total falsch liege. Probieren Sie es einfach aus, auf LLVM bekomme ich einen Segmentierungsfehler für den Subscript-Operator. – Cedric
Danke für den Vorschlag. Ich brauchte eine Weile, um meinen Code auf diese Weise neu zu implementieren. Ich habe immer noch den gleichen Fehler ... – Novice
Sorry das zu hören ... Ich hatte einmal ein ähnliches Problem und es hat es gelöst ... Ansonsten ist das einzige andere was ich sehe, dass die Aussage 'abs (Y [i ] .x - mid.x)
- 1. Rekursive Funktion druckt, gibt aber keine zurück
- 2. Rekursive Funktion gibt keine erzeugte Zeichenfolge zurück
- 3. Rekursive Funktion gibt keinen Wert zurück
- 4. Rekursive Funktion gibt leeres Array zurück
- 5. Javascript rekursive Funktion gibt keinen Wert zurück?
- 6. Warum gibt meine rekursive Funktion None zurück?
- 7. mysql query gelegentlich gibt nichts zurück
- 8. Indizierung eines Arrays in C gibt einen Segmentierungsfehler zurück
- 9. Rekursive Funktion gibt Fehlermeldung
- 10. Warum gibt meine rekursive JavaScript-Funktion die Zeichenfolge nicht zurück?
- 11. Python 2 Rekursive Funktion gibt zuvor ausgeführte Wert zurück
- 12. vDSP_conv gibt gelegentlich NANs
- 13. PythonWin gibt gelegentlich einen Fehler beim Öffnen
- 14. MPI Ring Leader Wahl gibt Segmentierungsfehler zurück
- 15. Fscanf, das einen Segmentierungsfehler gibt
- 16. System() gibt gelegentlich 2
- 17. SQLAlchemy gibt gelegentlich fälschlicherweise ein leeres Ergebnis zurück
- 18. Segmentierungsfehler (core dumped) Fehler C++ rekursive Aufrufe
- 19. Warum gibt Cocoa gelegentlich eine leere Zeichenfolge zurück?
- 20. Warum gibt diese Funktion einen Zeiger zurück?
- 21. Funktion gibt einen Nicht-Typ zurück?
- 22. Segmentierungsfehler C++ Warum gibt mein Programm einen Segmentierungsfehler?
- 23. Rekursive Funktion verursacht einen Stapelüberlauf
- 24. TableAdapter gibt gelegentlich Zeilenanzahl 1 zurück, aber alle Nullspalten
- 25. Warum gibt mir das einen Segmentierungsfehler?
- 26. /bin/bash gibt einen Segmentierungsfehler beim Start
- 27. WebRTC gibt gelegentlich schwarzen Bildschirm
- 28. rekursive Merge-Sortierung, Segmentierungsfehler für große Arrays
- 29. Javascript-Funktion gibt nicht zurück/exit
- 30. Funktion gibt nichts zurück
Wo setzt Ihr Debugger den Segmentierungsfehler? – Cedric
Immer dieselben Eingabedaten oder verschiedene Daten verwenden? Wenn die Funktion rekursiv ist, könnte der Stapelspeicher knapp werden. Versuchen Sie, den Stapel zu erhöhen, der auf den Daten erneut ausgeführt wird, die das Programm abstürzen. – iksemyonov
@Cedric hat gerade einen Debugger ausprobiert und er sagt, dass der Segmentierungsfehler bei 'for (j = i + 1; j
Novice