menge von mit new belegten speicehr abfragen.
-
also, wie ihr wisst kann man ja mit sizeof die größe eines arrays abfragen
char bla[10]; cout<<sizeof(bla);//gibt 10 aus.
aber wie kann man nun mit new belegten speicher abfragen?
char* bla=new char[10] cout<<sizeof(bla);//gibt 4 aus
-
Gar nicht, wurde schon öfter gefragt.
-
Hallo,
[quote otze]
aber wie kann man nun mit new belegten speicher abfragen?
[/quote]gar nicht, die Größe dynamisch besorgten Speichers muß man sich selber merken, ein "danach" gibt es nicht.
MfG
-
hmm ok, dann muss ich den user der funktion selber rechnen lassen^^
-
Vielleicht kannst du ja einen vector benutzen, das ist oft praktischer und du musst dich um nichts mehr kümmern und hast auch immer die Anzahl der Elemente gespeichert!
-
nein,das geht nicht
-
warum?
-
streamklasse?
-
otze schrieb:
streamklasse?
bunter Hund?
-
wuff
-
Falls du es nicht bemerkt hast, das war ein Hinweis darauf, dass du keien Erklärung abgegeben hast.
Denn jedesmal wenn du rohen Speicher anfasst, musst du einen verdammt guten Grund haben.
-
weils keinen rohen speicher bei mir gibt, deshalb.
-
otze schrieb:
weils keinen rohen speicher bei mir gibt, deshalb.
Dann war die Frage mit new also nur hypothetischer Natur?
-
nein.
wenn meiner funktion ein array übergeben wird, soll der pointer des arrays auf die gewünschte position im speicher ausgerichtet werden.
der mögliche bereich ist genau abgesteckt,und soll bzw darf nicht übertreten werden.
deshalb der test mit sizeof.
wenn aber schon mit new speicher allokiert wurde, muss ich das ebenso in erfahrung bringen können,und da das scheinbar nicht funktioniert muss ich jetzt wieder nen neuen algorithmus schreiben^^
-
ah ja, und dieser char* ist dann natuerlich kein roher Speicher.
-
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.
-
otze schrieb:
bei mir gibts keinen rohen speicher, bei mir gibts nen allocator der sich drum kümmert :D.
Fuer mich ist jeder Zeiger (der ein Array darstellt) roher Speicher und wird irgendwie gekapselt. Egal ob er per new[], mallc oder foo::allocate() allokiert wurde.
-
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..