Programm unklar / Sinn von malloc

Gast #1542693
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
#1542697
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren