EOutOfResources bei TStrings::Move (war: Verzweifelter anfänger)
-
Hi,
ich erhalte folgende Fehlermeldung:
"Project Project1.exe raised exception class EOutOfResources with Message "Unable to Insert Line"."kann mir da villeicht jemand helfen. Danke schonmal im voraus.
Edit:
Bitte aussagekräftige Überschriften wählen. Danke!
-
Weißt du an welcher Stelle der Fehler auftritt? Schau's dir mal im Debugger an und wenn du die Stelle gefunden hast, dann postest du hier den Code.
EDIT: Und machst für uns die Stelle kenntlich

-
mov position; mov zahl; AnsiString Name; int index=0; int anzahl; char *name; int a=0; anzahl=FileListBox1->Items->Capacity; while (a<anzahl) { while (index<anzahl) { Name=FileListBox1->Items->operator [](index); name=Name.c_str(); zahl.mov[index]=zahl_aus_string(name); position.mov[index]=index; //in dieser Zeile müßte der Fehler sein [b]FileListBox1->Items->Move(position.mov[index],zahl.mov[index]);[/b] index++; ProgressBar1->Position++; } Sortieren(position.mov,anzahl); Sortieren(zahl.mov,anzahl); index=0; a++; }
-
Du versuchst, einen Eintrag über das Ende der Liste hinaus zu verschieben. D.h. zahl.mov[index] ist vermutlich >= Anzahl der Einträge in der ListBox, und das darf halt nicht sein.
Statt Capacity solltest du vielleicht mal Count verwenden.
-
@janson
das ist doch egal ob ich Capacity nehme oder Coount, die liefern mir bei den gleichen Wert.
-
BCB-Hilfe schrieb:
Capacity kann gelesen werden, um die Anzahl der Objekte zu ermitteln, die in der Liste Platz finden, ohne daß weiterer Speicher reserviert werden muß.
So viel dazu
Also nimm Count.P.S. Es heißt Jansen (=
-
Carpocalypse schrieb:
das ist doch egal ob ich Capacity nehme oder Coount
Deshalb bietet das VCL-Objekt auch beide Eigenschaften an, und schmeisst nicht die eine, überflüssige, raus, gelle?
Carpocalypse schrieb:
die liefern mir bei den gleichen Wert.
Das muss aber nicht immer so sein. Lies einfach nochmals genau nach, was über "Capacity" und was über "Count" geschrieben wird in dre HIlfe.
Jansen schreibt das auch bestimmt nicht einfach aus juxx da hin oder weils egal ist. Man sollte also mind. ein bis zweimal die eigenen Entscheidungen überdenken, wenn jmd einem zu etwas anderem rät.
Ausserdem liesse sich die folgende Zeile:
Name=FileListBox1->Items->operator [](index);so wohl lesbarer schreiben:
Name=FileListBox1->Items[index];...
Und vielleicht steppst du einfach mal mit dem Debugger durch deine Schleife und beobachtest mal alle Indexwerte genaustens...
-junix
EDIT: Mist (o;
-
PM2k: Danke!

Für TStrings behauptet die Hilfe allerdings, dass "ein Lesezugriff auf Capacity den Wert der Eigenschaft Count zurück[gibt]", deshalb ist der Einwand berechtigt. Aus demselben Grund hatte ich aber auch extra vielleicht geschrieben.
-
Im nächsten Satz der Hilfe steht aber auch:
Nachkommen von TStrings können diese Eigenschaft überschreiben, damit die String-Liste Speicher für Elemente reservieren kann, die noch nicht in der Liste enthalten sind.
Das kann sich also ändern. Selbst wenn es jetzt funktioniert, heißt das, dass es nach dem nächsten Update noch funktioniert. Und TStrings ist hierbei auch eine Ausnahme. In der Regel differieren die Werte von Capacity und Count.
-
Genau wegen dieser Mehrdeutigkeit hab ich den Vorschlag ja (trotzdem) gemacht.

PS. Habe die Threadüberschrift jetzt nochmal korrigiert, nachdem ich dort verwirrenderweise TList::Move geschrieben hatte.