Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C (C89 und C99) ::  free     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
RobinH
Unregistrierter




Beitrag 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




Beitrag 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




Beitrag noobLolo Unregistrierter 22:47:28 10.03.2010   Titel:              Zitieren

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.de/forum/viewtopic-var-t-is-206606.html

lg lolo
RobinH
Unregistrierter




Beitrag RobinH Unregistrierter 23:03:01 10.03.2010   Titel:              Zitieren

0K DANKE
RobinH
Unregistrierter




Beitrag 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
C/C++ Forum :: C (C89 und C99) ::  free   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.