delete[] Frage

03/24/2012 15:40 kleinernascher4#1
Ich habe ein Problem mit dem delete[] Operator.
Hier mein code:
PHP Code:
char *Data;
int DataSize;
//hier code (DataSize ändert sich im Verlaufe dieses Stücks zu einer Variable > 0)

Data = new char [DataSize];

//hier werden Data werte zugewiesen

delete[] Data
mein Problem ist jetzt:
wenn ich im taskmanager den arbeitsspeicher meines prgrammes anschaue, steigt er bei der stelle Data = new char [DataSize]; an. is gutso, soll ja so sein :). aber wenn ich ihn mit delete lösche passiert garnix! eigentlich müsse der wert des benutzten arbeitsspeichers doch auf den anfangswert zurückgehen, tut er aber nicht! wenn jezt der code im programm mehrmals aufgerufnen wird, (und DataSize dabei denselben wert hat) bleibt gleich wie bei dem ersten aufruf von Data = new char [DataSize];.
d.h. er entfernt den speicher doch nur er selber kann ihn ich auch wieder allokieren!
kann mir bitte jemand sagen was an dem code falsch ist?
03/24/2012 16:22 Nightblizard#2
Daran ist nichts falsch (mal abgesehen davon, dass du im Kommentar geschrieben hast "Variable < 0". Wenn das kein Fehler war, dann hast du das Problem bereits gefunden).
Ich denke du allokierst einfach zu wenig Speicher, als dass du das sehen könntest. Versuch mal 100mb und geb die dann wieder frei. Das solltest du sehen können.

Btw. du solltest in der Regel keine Arrays nutzen. Dafür ist std::vector zuständig.
03/24/2012 17:22 yihaaa#3
Versuchs mal mit einem smartPointer.

MfG
03/25/2012 10:54 kleinernascher4#4
Quote:
Originally Posted by Nightblizard View Post
Btw. du solltest in der Regel keine Arrays nutzen. Dafür ist std::vector zuständig.
std::vector? smart pointer? wasn das O.O
kann das mal jemand erklären:)
03/25/2012 15:53 jacky919#5
Die Klasse Vektor ist Teil der Standard Template Libary. Sie ist eine Container-Klasse und wird mit Templates in C++ realisiert. Wenn du C++ mit einem Buch lernst, sollte das noch erklärt werden. (Refernz: [Only registered and activated users can see links. Click Here To Register...])
03/25/2012 17:35 kleinernascher4#6
ahhh, danke. werds mir mal angucken.

ich bin jedoch geradeeben wieder suf ei problem gestoßen...:(

ich benutze diesen array um eine datei zu übermitteln (benutze winsocket &TCP)
die beispieldatei hat eine größe von 488.448 Bytes und is ne exe. dh öffne ich die datei im binären modus.
zuerst übermittle ich die größe der datei
dann sende ich sie.
das problem dabei ist, dasnn nachdem ich sie gesendet habe und mit recv() empfangen habe nur SELTEN(!!) wirklich alle bytes empfangen werden. dh (habe ich bereits überprüft) die send() funktion senden 488.448 bytes die recv() funktion empfänget aber nur z.b.24343 Bytes. was mach ich falsch? (die übrigen bytes werden beim schreiben der datei übrigens nicht mit 0 ausgegeben sondern mit dieser absonderlichkeit: ð*º)
weiss jemand hierzu was?
03/25/2012 17:38 jacky919#7
Was gibt send() zurück?
03/25/2012 19:11 kleinernascher4#8
send gibt 488.448 zurück, aber recv immer irgendwas anderes, nur manchmal 488.448.
03/25/2012 19:17 jacky919#9
Was für eine send Funktion nutzt du?
Die hier: [Only registered and activated users can see links. Click Here To Register...]?
03/25/2012 19:20 kleinernascher4#10
ja, genau die
03/25/2012 19:21 jacky919#11
Achso hatte was falsch verstanden ;)
Was gibt [Only registered and activated users can see links. Click Here To Register...] nach dem Empfangen zurück?
03/25/2012 22:02 MrSm!th#12
Quote:
Originally Posted by yihaaa View Post
Versuchs mal mit einem smartPointer.

MfG
Inwiefern sollte das etwas ändern?

Verstehe ich das übrigens richtig? Du schreibst eine Netzwerkanwendung und kennst grundlegende Klassen wie std::vector nicht?

Hast du die Versendung der Datei auf deinem PC probiert oder läuft das wirklich über ein Netzwerk zu einem anderen PC/Server?
03/26/2012 14:17 kleinernascher4#13
habs auf meinem eigenen pc probiert(dh. server & client laufen auf eigenem pc). es werden alle daten gesendet aber nur manchmal alle empfangen, keine regelmäßigkeit (soweit ich das beurteilen kann).
03/26/2012 14:55 jacky919#14
Wie gesagt, was gibt WSAGetLastError nach dem Empfangen zurück?
03/26/2012 15:09 MrSm!th#15
Läufst du denn solange durch, bis recv 0 zurückgibt?
Es wird nicht immer alles in einem Rutsch empfangen.