free
-
Also ich habe folgende Funktion
char * reading(char * input, int len) { char *buffer=(char*)malloc(len); //....bearbeite input... //free(buffer); //dann kommt nur Schrott return buffer; //free(buffer); //bringt das was ? }
Soll-Muss-Darf ich den Speicher wieder freigen, wenn ja wie wäre es richtig
mfg Robin
-
RobinH schrieb:
Also ich habe folgende Funktion
char * reading(char * input, int len) { char *buffer=(char*)malloc(len); //....bearbeite input... //free(buffer); //dann kommt nur Schrott return buffer; //free(buffer); //bringt das was ? }
Soll-Muss-Darf ich den Speicher wieder freigen, wenn ja wie wäre es richtig
mfg Robinja du solltest den speicher schon freigeben, allerdings nicht in der function...
#include <stdio.h> #include <string.h> char * reading(char * input, int len){ char *buffer=(char*)malloc(len); memcpy(buffer,input,len); return buffer; } int main(void){ char *buffer = reading("input",sizeof("input")); printf("%s\n",buffer); free(buffer); return 0; }
lg lolo
-
btw. auch wenn ich das schon länger nichtmehr bemängelt hab, weil scheinbar jeder tutor in deutschland das so unterrichtet
die rückgabe von malloc() bitte nicht casten, warum steht in der FAQ
http://www.c-plusplus.net/forum/viewtopic-var-t-is-206606.htmllg lolo
-
0K DANKE
-
noobLolo schrieb:
#include <stdio.h> #include <string.h> char * reading(char * input, int len){ char *buffer=(char*)malloc(len); memcpy(buffer,input,len); return buffer; } int main(void){ char *buffer = reading("input",sizeof("input")); printf("%s\n",buffer); free(buffer); return 0; }
Soweit OK
Habe mein Programm erweitert-> "hängt sich (wahrscheinlich wegen falscher Speicherzuweisung) auf"!char * ReadData (int dwread) { DWORD dwRead = 0; char chRead; int ret=0,count=0; char *buffer; buffer=malloc(1); ret=ReadFile(hCom, &chRead, 1, &dwRead, NULL); while (ret!=0) { if (dwRead != 1) break; buffer=realloc(buffer,count+1); buffer[count++] = chRead; ret=ReadFile(hCom, &chRead, 1, &dwRead, NULL); } *(int*)dwread=count; if (!ret) buffer=NULL; return buffer; } char * converter(unsigned char* ucInput,int Len) { char *charout=malloc(Len); char out[2]; int c; out[0]='\0'; sprintf(charout,"Gelesen:(%d) ",Len); for(c=0;c<=Len;c++) { sprintf(out,"%c",ucInput[c]); if ((*out=='\0')||(*out=='\n')||(*out=='\r')) *out='_'; strcat(charout,out); } free(charout); //funktioniert so ???? komisch return charout; } char * SendData(unsigned char * Unwichtig,int iLen) { int dwBytesRead; int iptr=(int)&dwBytesRead; char *cbuff; cbuff=ReadData(iptr); *(int*)iLen=dwBytesRead; if (cbuff!=NULL) { char* extrabuff = malloc(dwBytesRead+1); strncpy(extrabuff,cbuff,dwBytesRead); extrabuff=converter((unsigned char*)cbuff,dwBytesRead); SetWindowText(hwnd,extrabuff); //für Editfeld free(extrabuff); return cbuff; } } int main(void){ char *buffer; int Bytes; int lenRB=(int)&Bytes; buffer=SendData("0xff",lenRB); printf("%c\n",buffer[Bytes-2]); //diese funktion wird ca. 30 mal //aufgerufen dann kommt free(buffer) //dann wieder 30..free(.....usw free(buffer); return 0; } //Code ist etwas gekürtzt