variable im speicher vergrößern
-
ich möchte folgendes machen:
mein client programm soll binäre daten zum server senden. das ist alles kein problem.so sieht bisher die funktion aus:
int CUGDialog::Sock_SendData(CUGSocket *uSocket, int iMsgMode, void *vData, int iSize) { BYTE *bBuffer; int iIntSize, iBufLen, iReturnVal; // Größe berechnen: iIntSize = sizeof(int); iBufLen = (iIntSize * 2) + iSize; bBuffer = new BYTE[iBufLen]; memcpy(bBuffer, &iMsgMode, iIntSize); // Messagemode kopieren memcpy(bBuffer + iIntSize, &iSize, iIntSize); // Datengröße kopieren memcpy(bBuffer + (iIntSize * 2), vData, iSize); // Daten kopieren iReturnVal = uSocket->Send(bBuffer, iBufLen); // Buffer leeren: delete bBuffer; return (iReturnVal); }
mit der funktion versende ich z.B. strukturen. ('iMsgMode' ist nur eine nummer, damit der server weis worum es sich bei der nachricht handelt)
jetzt möchte ich demnächst aber mehrere strukturen in meine buffer variable kopieren. dazu lege ich die buffer-variable als membervariable in meiner klasse fest:
BYTE *bBuffer;
dann rufe ich die funktion mehrmals auf (an den serversocket wird dann aber noch nicht gesendet) und schreibe jedes mal größe der struktur gefolgt von dem inhalt der struktur in den buffer.
jetzt das problem:
ich erzeuge mit 'new[xxx]' neuen speicher, aber wie kann ich den direkt an meine buffer-variable anhängen? oder ist das ganze doch einfacher als ich dachte !?hoffe ihr wist was ich meine
-
Mit new kann man Speicher nicht reallokieren.
Du könntest die CRT mit malloc/realloc/free verwenden.
Oder warum verendest Du nicht std:vector<BYTE>?
-
mit vektoren habe ich noch nichts gemacht.
kann ich mit nem vektor denn sowas wie das hier machen?:
uSocket->Send(&meinVektor, größeMeinesVektors);
im vektor würden dann alle meine daten stehen, die sich dann aus den ganzen strukturen zusammensetzen. mit dem aufruf der funktion würden dann die ganzen informationen alle in einem stück gesendet werden ?
-
Fast richtig:
uSocket->send(vec.begin(),vec.size()*sizeof(TData));
(edit: stimmt, es ging um einen vector<BYTE> - da kann man das sizeof auch weglassen)
-
habs jetzt, danke euch !!
das mit malloc/realloc/free war mir aber lieber, an die vektoren muss ich mich aber auch mal ransetzen. sollte man ja eigentlich können sowas