pointer zurückgeben
-
hallo,
sind hier beide versionen gleich? also wird da 2 mal ein pointer returned?cu
char* Buffer { char *bitmap_buffer = new char[100]; m_Data.receive(bitmap_buffer, sizeof(buffer)); return bitmap_buffer; } char Buffer { char *bitmap_buffer = new char[100]; m_Data.receive(bitmap_buffer, sizeof(buffer)); return *bitmap_buffer; }
-
1. returned einen String
2. returned einen charreturn *bitmap_buffer;
ist gleichwertig mit
return bitmap_buffer[0];
-
davon abgesehen, dass sizeof() von einem pointer auf 32bit architekturen immer 4byte zurückgibt (und nicht 100 wie du denkst) und die funktionen total krumm sind...
(1) gibt einen pointer zurück
(2) gibt nur das erste zeichen im puffer zurück, also keinen zeiger sondern einen charachja, wir sind hier in ANSI C, da benutzt man malloc() und free()
new gibts erst in c++. aber das ändert am pointerproblem nichts.
-
c.rackwitz schrieb:
davon abgesehen, dass sizeof() von einem pointer auf 32bit architekturen immer 4byte zurückgibt (und nicht 100 wie du denkst) und die funktionen total krumm sind...
(1) gibt einen pointer zurück
(2) gibt nur das erste zeichen im puffer zurück, also keinen zeiger sondern einen charachja, wir sind hier in ANSI C, da benutzt man malloc() und free()
new gibts erst in c++. aber das ändert am pointerproblem nichts.hallo,
das weiss ich mit sizeof...aber ich brauch halt mal nun 101 elementewarum soll das nun krumm sein?
cu
-
also an den funktionen fehlen die () nach dem namen...
dann würden die funktionen vielleicht nicht auf anhieb compilieren
-
aja;-) ist mir gar nicht aufgefallen...*g*
cu
-
c.rackwitz schrieb:
davon abgesehen, dass sizeof() von einem pointer auf 32bit architekturen immer 4byte zurückgibt (und nicht 100 wie du denkst)
Wenn buffer in diesem Fall global angelegt wurde und nicht der Funktion übergeben wird, dann gibt sizeof() schon die Größe des Buffers zurück und nicht die Größe des Zeigers.
-
tactx, das war mir klar.
ich bin davon ausgegangen, dass buffer gleich bitmap_buffer und dass er sich verschrieben hat.
nur muss ich hier alle möglichkeiten aufzählen?
wieso sollte er buffer global definieren?außerdem macht das meine aussage nicht falsch. ich hab von pointern geredet.
-
char Buffer() { char *bitmap_buffer = new char[100]; m_Data.receive(bitmap_buffer, sizeof(buffer)); return *bitmap_buffer; }
wie lösche ich hier dann den Speicherbereich...hab ja keinen pointer...?
-
wenn du die funktion aufrufst, musst du dort auch den speicher wieder deleten.
ANSI C wäre aber malloc() und delete()
also z.b.char *foo = Buffer(); delete[] foo;
weil Buffer() selbst nichts wieder freigibt.