Forum: PC-Programmierung Programm unklar / Sinn von malloc


von Bert (Gast)


Lesenswert?

Hi,

hab hier dieses Programm, dass eine Matrix einließt und dann 
transponiert wieder ausgibt:
1
#include <stdio.h>
2
#include <stdlib.h>
3
4
5
int main()
6
{
7
  int z=0, s=0;
8
  double *matrix;
9
10
  /* Speicher reservieren */
11
  matrix = (double *) malloc(3*3 * sizeof(double));
12
  
13
  /* Matrixelemente einlesen */
14
  for (z=0; z<3; ++z){
15
    for (s=0; s<3; ++s){
16
      printf("Element %i/%i: ", z, s);
17
      scanf("%lf", &matrix[ z*3 + s ]);
18
    }
19
  }
20
21
  /* Ausgeben der Transponierten */
22
  printf("Die Transponierte lautet:\n");
23
  /* Beim Transponieren werden Zeilen und Spalten vertauscht: */
24
  for (s=0; s<3; ++s){
25
    for (z=0; z<3; ++z){
26
      printf("%8.2lf", matrix[ z*3 + s ]);
27
    }
28
29
    printf("\n");
30
  }
31
32
  return 0;
33
}

Ich verstehe hier den Sinn von malloc nicht.
Das Programm würde doch genauso funktionieren, wenn man einfach
double matrix;
schreibt und malloc ganz weglässt.

Ich hoffe, jemand kann mir das erklären.

Gruß
Bert

von Karl H. (kbuchegg)


Lesenswert?

Bert schrieb:

> Ich verstehe hier den Sinn von malloc nicht.
> Das Programm würde doch genauso funktionieren, wenn man einfach
> double matrix;

double matrix[3*3];

> schreibt und malloc ganz weglässt.

Ja, würde es.

> Ich hoffe, jemand kann mir das erklären.

Vielleicht ist es einfach nur eine Vorstufe zu
1
int main()
2
{
3
  int matrix_dim;
4
5
   ...
6
7
   printf( "Geben sie die Dimension der Matrix ein: " );
8
   scanf( "%d", &matrix_dim );
9
10
  /* Speicher reservieren */
11
  matrix = (double *) malloc(matrix_dim*matrix_dim * sizeof(double));
12
  
13
  /* Matrixelemente einlesen */
14
  for (z=0; z<matrix_dim; ++z){
15
    ....

und dann bist du ohne malloc aufgeschmissen.

Übrigens: Guter Programmierstil erfordert, dass allokierter Speicher 
auch wieder freigegeben wird. Jedes malloc muss also ein 
korrespondierendes free haben.

von Markus (Gast)


Lesenswert?

Der unterschied ist darin, wo der Speicher benutzt wird.
bei
1
double matrix[3*3];
wir der Speicher im Stack angelegt
und bei
1
double* matrix = maloc(3*3*sizeof(double));
im Heap

Am besten liest du dir diesen Artikel mal durch 
http://tutorial.schornboeck.net/stack_heap.htm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.