Autor
Nachricht
RobinH
Unregistrierter
RobinH Unregistrierter
22:36:07 10.03.2010 Titel:
free
Zitieren
Also ich habe folgende Funktion
C/C++ Code: 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
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 ?
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10
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 ?
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10
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
noobLolo
Unregistrierter
noobLolo Unregistrierter
22:43:01 10.03.2010 Titel:
Re: free
Zitieren
RobinH schrieb: Also ich habe folgende Funktion
C/C++ Code: 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
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 ?
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10
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 ?
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10
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...
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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;
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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;
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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
noobLolo
Unregistrierter
noobLolo Unregistrierter
22:47:28 10.03.2010 Titel:
Zitieren
RobinH
Unregistrierter
RobinH Unregistrierter
23:03:01 10.03.2010 Titel:
Zitieren
RobinH
Unregistrierter
RobinH Unregistrierter
21:13:16 15.03.2010 Titel:
Re: free
Zitieren
noobLolo schrieb:
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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;
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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;
}
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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"!
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
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
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
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
C/C++ Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
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
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.