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 Robin

    ja 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.html

    lg 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
    

Log in to reply