Das alt bekannte Problem mit den Pointern
-
Hi,
Ich Arbeite immoment an einer HTTP-Klasse und möchte dem Benutzer die Möglichkeit geben, den Content in eine Datei oder direkt in den Arbeitsspeicher schreiben zu lassen. Das mit der Datei funktioniert mittlerweile einwandfrei nur beim Arbeitsspeicher gibt es einen Sigmentation Fault Fehler also eine Zugriffsverletzung.
Mein Code sieht vereinfacht so aus:else { cout << "Downloading... (Chunked)" << endl; while(true) { stringstream sstream; GetLine(Socket, sstream); int chunkSize = -1; sstream >> hex >> chunkSize; // Größe des nächsten Parts einlesen if(chunkSize <= 0) { break; } cout << "Downloading Part (" << chunkSize << " Bytes)... " << endl; recvSize = 0; // Vor jeder Schleife wieder auf 0 setzen bool FirstTime = true; while(recvSize < chunkSize) { int bytesToRecv = chunkSize - recvSize; if((bytesRecv = recv(Socket, buf, bytesToRecv > sizeof(buf) ? sizeof(buf) : bytesToRecv, 0)) <= 0) { throw CreateSocketError(); } recvSize += bytesRecv; if(request.isbuffer == false) { fout.write(buf, bytesRecv); } else { if(FirstTime == true) { strcpy(response.data, buf); FirstTime = false; } else strcat(response.data,buf); } cout << "\r" << recvSize * 100 / chunkSize << "%" << flush; } cout << endl; for(int i = 0; i < 2; ++i) { char temp; recv(Socket, &temp, 1, 0); } } }Die response Klasse sieht so aus:
class HTTP_RESPONSE { public: bool ConnErr; bool HTTP_VERSION ; short HTTP_STATUS; std::string Server; std::string ContentType; int ContentLength; std::string TransferEncoding; std::string Connection ; std::string Cookie; //Hier muss noch eine Klasse für Cookies implementiert werden //The Pointer to char for the stuff the server gives you char * data; HTTP_RESPONSE() :ConnErr(true),HTTP_VERSION(HTTP_1_1),ContentLength(-1) { } };Kann mir vielleicht erklären was ich mit den char * falsch mache?
Mfg cobra11freak
-
Du musst schon Speicher für deinen
char*reservieren. Aber da gibts bessere Möglichkeiten als sich mit manueller Speicherverwaltung durchzuschlagen, z.B.std::vector<char>.
-
Hi
Vielen Dank für die Antwort.
Daran habe ich auch schon gedacht, ich dachte nur, das die vector Nutzung vielleicht erhebliche Geschwindigkeitsverluste mit sich bringt.
Trotzdem werde ich das jetzt ersmal so machen.MfG cobra11freak
-
Hi
Ich kann dann aber nur einzelne Zeichen übergeben, nicht gleich meinen ganzen buffer. Gibt es da nicht irgendwie effizientere Methoden?
MfG cobra11freak
-
cobra11freak schrieb:
ich dachte nur, das die vector Nutzung vielleicht erhebliche Geschwindigkeitsverluste mit sich bringt.
Worauf basiert deine Vermutung?
cobra11freak schrieb:
Ich kann dann aber nur einzelne Zeichen übergeben, nicht gleich meinen ganzen buffer. Gibt es da nicht irgendwie effizientere Methoden?
Natürlich kannst du den ganzen Puffer übergeben. Z.B. Mit dem Konstruktor oder
assign(). Siehe http://www.cplusplus.com/reference/stl/vector/.
-
Hi
Ich kann dann aber nur einzelne Zeichen übergeben, nicht gleich meinen ganzen buffer. Gibt es da nicht irgendwie effizientere Methoden?
MfG cobra11freak
-
Du wiederholst dich...
