menge von mit new belegten speicehr abfragen.
-
otze schrieb:
so, erstmal um aneinandervorbeireden zu vermeiden: roher speicher ist für mich nicht allokiert.
bei mir gibts keinen rohen speicher, bei mir gibts nen allocator der sich drum kümmert :D.
Wo ist dann das Problem? Hat der Allocator diese Informationen nicht?
mfg
v R
-
roher speicher ist für mich nicht allokiert.
Da rate ich dir dich der Allgemeinheit anzuschließen und die Bedeutung dieses Begriffs der allgemeinen anzupassn. Sonst wirst du des öfteren Probleme bekommen.
So du bekommst von irgend einem Allokator rohen Speicher. Du wirst ihm aber doch mitgheteilt haben wieviel Speicher du gerne hättest, weißt also wie groß er ist. Somit kannst du Größenangabe und Adresse des Speichers zu einem Objekt zusammenfassen.
-
@helium
nehmen wir mal an, ich habe einen datensatz,sagen wir mal der hat ne größe von 1kb, und ist nur mit float werten bestückt. Das ist also mein allokierter speicher.
nun will jemand ein array habn, welches vom 7.-16. float wert reicht.
er übergibt mir also dieses array,und ich lass es auf das 7. float element zeigen.
das erspart mir nun neuen speicher bereitzustellen, und somit ist alles in ordnung.
so, sagen wir mal, der user hat nen fehler in der berechnung gemacht, und will nun das array am 256. eintrag starten lassen(256*float=1kb also letzter eintrag).
Wenn ich jetzt die größe des arrays prüfen könnte,könnte ich ne eof exception werfen, weil ja 8 der 9 elemente ins leere zeigen
das 2. problem ist, wenn der user mir keinen freien pointer gibt, sondern einen der auf einen speicherbereich zeugt der von new allokiert wurde.
in dem fall müsste ich den speicherbereich entweder deleten oder in den speicherbereich reinschreiben.
da ich das nicht kontrollieren kann, werd ich wohl generell über eigene pointerklassen gehen müssen..
-
Wie gibt dein Allocator dir Speicher?
mfg
v R
-
meinst du wie er erstellt wird?
-
otze schrieb:
meinst du wie er erstellt wird?
Ich kann deiner obigen Erklaerung nicht ganz folgen. Was hat ein Allocator mit
float am Hut?mfg
v R
-
allokiere mir speicher für 256 floats.
-
otze schrieb:
allokiere mir speicher für 256 floats.
Dem Allocator ist es doch egal, ob der Speicher fuer float's, int's oder foo's
genutzt wird. Der (oder besser _ein_) Allocator (so wie ich ihn mir vorstelle)
Reserviert freien Speicherplatz und kommt eine Speicheranforderung so handelt
das der Allocator und gibt entsprechend Speicher zurueck. Ob der Speicher nun
fuer ein Array von float's gebraucht wird oder fuer ein Array von bar's, ist dem
Allocator doch egal.Aber mal zurueck zum Thema :). Wie viele Elemente dein Array hat, ist dir doch
bekannt, schliesslich legst du es ja auch an ;).mfg
v R
-
jep, mir ist es bekannt, dem dummen programmierer aber vielleicht nich
dem muss ich halt ne exception werfen, dass er sich wohl irgendwo verrechnet hat, weil sein array in leeren raum zeigt.
-
float * begin = Allokator.allocat(256); float * end = begin + 256;
Wenn du jetzt wissen willst, ob hinter einer gewissen Position noch genügend elemente vorhanden sind, schreibst du:
if (begin + start_postion + length > end) throw out_of_range("Balbla");
BTW, was willst du die ganze Zeit mit deinem End of File? Was hat das ganz mit Dateien zu tun?
-
otze schrieb:
jep, mir ist es bekannt, dem dummen programmierer aber vielleicht nich
dem muss ich halt ne exception werfen, dass er sich wohl irgendwo verrechnet hat, weil sein array in leeren raum zeigt.Du willst also bei sowas hier:
char *a = new char[50]; //fuelle a for(int i = 0; i < 100; ++i) cout<<a[i];
mitbekommen, sobald er auf a[50] zugreift. Nur wie stellst du dir vor, wie das
funktionieren soll? Du kannst den Zugriff auf ein normales Array nicht abfangen,
dafuer braeuchtest du ne Array-Klasse, welche seine Groesse kennt und
entsprechend reagiert, falls man mit einem Index > ArraySize zugreifen will.Wuesste nicht, wie das zu loesen waere.
mfg
v R
-
ebend, mit ner array klasse
hab ja schon gesagt, dass ich nu was neues vorhab^^
-
otze schrieb:
ebend, mit ner array klasse
hab ja schon gesagt, dass ich nu was neues vorhab^^
Das kommt davon, weil du nie ordentliches Posts machst, sondern immer nur einen Satz oder 2 hinpfefferst - aber nix erklärst.
-
okok.
aber ich denke, dass folgende bzw ähnliche situation ersichtlich ist:das funktioniert so nicht
ok, dann lass ichd as, und probier was andres