Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

1

27.05.2005, 12:07

Kann man mit free auch Arrays einfach freigeben?

Ich hab malne eigentlich dumme Frage, aber naja. Mich würde mal interessieren ob man mit free() auch arrays freigeben kann oder man da das Array durchlaufen muss! Arrays kann man ja in C++ mit delete[] freigeben. Reicht in der C Version free() oder eher free(Array[0]) ???

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

27.05.2005, 12:48

free(Array) geht nicht, das wird auf jeden Fall zu einem Fehler führen.
Kann auch gar nicht gehen, es sei denn der Compiler könnte hellsehen.

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

27.05.2005, 14:31

... he sry das kapier ich aber nicht! Klingt zwar logisch was du da sagst, aber...

Siehe Doku:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdlib.h>         /* For _MAX_PATH definition */
#include <stdio.h>
#include <malloc.h>

   char *string;

   /* Allocate space for a path name */
   string = malloc( _MAX_PATH );

   // In a C++ file, explicitly cast malloc's return.  For example,

   // string = (char *)malloc( _MAX_PATH );


   if( string == NULL )
      printf( "Insufficient memory available\n" );
   else
   {
      printf( "Memory space allocated for path name\n" );
      free( string );
      printf( "Memory freed\n" );
   }


Ein string is ja auch ein Array, nur eben das jeder Eintrag ein Byte groß ist (char) - hat das evtl. damit etwas zu tun?

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

27.05.2005, 14:32

Übrigends: zu einem Fehler führt das in meinem Programm nicht nur zu evtl. Speicherverlust. Deswegen frag ich :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

27.05.2005, 15:30

Sag nochmal, was Du jetzt genau machen willst.
Poste bitte ein Beispiel, denn jetzt verstehe ich irgendwie nicht mehr, was Du meinst.

Ich dachte, Du meintest sowas hier:

C-/C++-Quelltext

1
2
int array[100];
free(array);

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

27.05.2005, 17:16

ne, david natürlich kein statisches Array, ein dynamische, alloziiert mit malloc.

Mein Problem dabei ist:
Ich poste mal nen Beispielcode

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int* x;
int* y;
unsigned NumInts = 5;

// eine einfache Variable, besser gesagt nen Zeiger

x = (int*) malloc(sizeof(int));
*x = 255;

// ein Array

y = (int*) malloc(sizeof(int) * NumInts);
y[0] = 255;
y[1] = 123;
y[2] = 569;
...

y[4] =123;

free(x);
free(y);



Ist das so richtig? Oder muss man zwischen Arrays und "einfachen Variblen" unterscheiden? Wie man das ganze bei delete, delete[] machen muss. Da sonst Speicherleks entstehen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

27.05.2005, 18:34

Das ist schon in Ordnung so.

Bei C++ muss man zwischen delete und delete[] unterscheiden, damit der Destruktor jedes Objekts aufgerufen wird.

Da es bei C keine Destruktoren gibt, ist es dort egal.
Da arbeitest Du einfach mit einem Zeiger auf zuvor reservierten Speicher. Wie Du den Speicher nutzt (ob Du eine Zahl drin speicherst oder 100), ist dabei egal.

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

27.05.2005, 20:21

Ahso, deswegen muss man also delete[] aufrufen! In Büchern wird meistens nur so beschrieben: bei Arrays: delete[] Da dachte ich wengen den mehreren Elementen, an Destruktoren dachte ich da nicht -

vielen dank! :huhu:

Werbeanzeige