ich versuche gerade ein einfaches Kommandozeilentool unter MacOSX in XCode zu schreiben.
Projekt ist ein einfaches C++ Tool. Den Fehler konnte ich nun auf folgendes runterbrechen und reproduzieren, nur nachvollziehen kann ich es nicht.
Vorneweg, im Debugbuild sind 2 zusätzliche Preprocessor Defines gesetzt, die wohl die STL in eine Art Debugmodus versetzen, daher komme ich an die unten stehende Fehlerausgaben.
Code: Alles auswählen
// main.cpp
#include <iostream>
#include <vector>
using namespace std;
class MyClass{
};
bool myCmpr(const MyClass& a, const MyClass& b) {
return true;
}
int main (int argc, char * const argv[]) {
std::vector<MyClass> input;
input.resize(20);
cout << input.size() << endl;
std::sort(input.begin(), input.end(), myCmpr);
return 0;
}
Also im Grunde eine sehr einfache Klasse erzeuge 20 davon und möchte sie gerne sortieren, soweit so unspektakulär. Code produziert folgenden fehler in der sort funktion.
Ich kann mir das überhaupt nicht erklären. Klar verstehe ich was das problem ist, angeblich würde ich den end() iterator dereferenzieren, aber da das in der sort methode passiert hab ich darauf ja keinen Einfluss. Ist vielleicht was an meiner Compare Methode falsch? Denn das Ausgeben der 20 Objekte geht ohne Probleme. Noch etwas merkwürdiges, füge ich bis zu 16 Objekte ein, funktioniert der Code, sobald ich 17 oder mehr einfüge geht es nicht./Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/debug/safe_iterator.h:178:
error: attempt to dereference a past-the-end iterator.
Objects involved in the operation:
iterator "this" @ 0x0xbffff3b4 {
type = N11__gnu_debug14_Safe_iteratorIN9__gnu_cxx17__normal_iteratorIP7MyClassN10__gnu_norm6vectorIS3_SaIS3_EEEEEN15__gnu_debug_def6vectorIS3_S7_EEEE (mutable iterator);
state = past-the-end;
references sequence with type `N15__gnu_debug_def6vectorI7MyClassSaIS1_EEE' @ 0x0xbffff3b4
}
Program received signal: “SIGABRT”.
kill
quit
Also ich hoffe jemand kann das bestätigen oder mir noch besser sagen, was ich da falsch mache. Auch wäre es nett wenn es mal jemand in einem anderen Compiler probieren könnte.
Danke im vorraus
Nico