Wieder Probleme mit Speicherreservierung bei Strings und Socketprogrammierung
-
Ich habe ein einfaches server-Programm, welches eine Bytekette einliest und sie in einem globalen *char als String ablegen soll.
Der Kern ist:Global definiert:
char* receivedString = NULL;
Funktion zum Einlesen 1. Versuch:
char acReadBuffer[kBufferSize]; int numReadBytes; numReadBytes = recv(sd, acReadBuffer, kBufferSize, 0); free(receivedString); receivedString = (char*) malloc( sizeof(char)*numReadBytes ); strcpy(receivedString, acReadBuffer);
Dabei kam aber der Fehler, es würde Speicher außerhalb des heaps angefordert werden.
Funktion zum Einlesen 2. Versuch:
char acReadBuffer[kBufferSize]; int numReadBytes; numReadBytes = recv(sd, acReadBuffer, kBufferSize, 0); if(receivedString != NULL) realloc(receivedString, sizeof(char)*numReadBytes); else receivedString = (char*) malloc( sizeof(char)*numReadBytes ); strcpy(receivedString, acReadBuffer);
Dabei geschieht allerdings auch ein Speicherfehler, so dass das Programm vorzeitig terminiert.
Was mache ich falsch?
-
Trace-Ausgabe in Dateien
int main() { UnlinkPrint(); ... Print(3, "[A]\n"); ... Print(3, "[B Preis %i]\n", Schweinehaelfte); ... Print(3, "Schweine im Weltall\n"); return(0); }
void Print(int channel, char *format, ...) { char *fn; FILE *fp; fn = "printx.txt"; fn[5] = (char)('0'+(channel%10)); if (format == 0) { unlink(fn); return; } if ((fp = fopen(fn, "at")) == 0) return; vfprintf(fp, format, (&format)+1); fclose(fp); } void UnlinkPrint(void) { int i; for (i = 0; i < 10; i++) Print(i, 0); }
Ich würde in den Quelltext ein paar Ausgaben reinsetzen, um zu schauen, wo das Programm genau abbricht.