Hi,
bin neu in C und würde gerne einen Gauss-Algorithmus implementieren. Leider scheitert es bereits an dem Problem, eine Matrix als 2-dimensionales Array zu ergzeugen, mit Daten zu füllen und auszugeben. Mein Code sieht so aus (poste nur die Routinen, die dafür relevant sind):
Alles anzeigen
Das Programm wird fehlerfrei compiliert, allerdings erscheint die folgende Matrix auf dem Bildschirm:
[ 5 2 0 0 ]
[ 5 7 0 0 ]
[ 3 8 0 0 ]
[ 4 6 8 2 ]
Offenbar werden also einige Werte korrekt übernommen, andere nicht. Ich bin mir ziemlich sicher, dass es an der Initialisierung der Matrix liegt. Da ist irgendwas falsch. Die auskommentierte Zeile hatte ich zuerst verwendet und die sollte ja eigentlich auch richtig sein oder? Mit der geht es allerdings überhaupt nicht. Dann kommt zur Laufzeit ein Fehler ("DAMAGE: after normal Block #42 at...").
Benutze VC++6 Pro unter Win XP. Habe das Programm einem Kumpel gegeben, bei dem der Fehler angeblich nicht auftritt. Habe es dann noch einem anderen Kumpel gegeben, der hat denselben Fehler. Irgendeine Feinheit nicht beachtet, die compilerabhängig unterschiedlich behandelt wird???
bin neu in C und würde gerne einen Gauss-Algorithmus implementieren. Leider scheitert es bereits an dem Problem, eine Matrix als 2-dimensionales Array zu ergzeugen, mit Daten zu füllen und auszugeben. Mein Code sieht so aus (poste nur die Routinen, die dafür relevant sind):
Quellcode
- #include <stdio.h>
- #include <stdlib.h>
- double **matrix;
- int m,n;
- double** InitMatrix(int rows, int cols){
- double **t;
- int i;
- t=malloc(rows * sizeof(double*) + rows * cols * sizeof(double));
- for(i=1; i<=rows; i++)
- t[i]= (double*) &t[rows +cols*i];
- //*t[i]= (double*) t + rows +cols*i;
- return t;
- }
- void PrintMatrix(double **pmatrix)
- {
- int i,j;
- printf("\n");
- for(i=1; i<=m; i++)
- {
- printf("[");
- for(j=1;j<=n;j++)
- printf(" %.3f ",pmatrix[i][j]);
- printf("]\n");
- }
- printf("\n");
- }
- int main()
- {
- m=4;
- n=4;
- matrix=InitMatrix(m+1,n+1);
- matrix[1][1]=1;
- matrix[1][2]=2;
- matrix[1][3]=3;
- matrix[1][4]=4;
- matrix[2][1]=5;
- matrix[2][2]=7;
- matrix[2][3]=9;
- matrix[2][4]=1;
- matrix[3][1]=3;
- matrix[3][2]=8;
- matrix[3][3]=1;
- matrix[3][4]=2;
- matrix[4][1]=4;
- matrix[4][2]=6;
- matrix[4][3]=8;
- matrix[4][4]=2;
- PrintMatrix(matrix);
- free(matrix);
- return 0;
- }
Das Programm wird fehlerfrei compiliert, allerdings erscheint die folgende Matrix auf dem Bildschirm:
[ 5 2 0 0 ]
[ 5 7 0 0 ]
[ 3 8 0 0 ]
[ 4 6 8 2 ]
Offenbar werden also einige Werte korrekt übernommen, andere nicht. Ich bin mir ziemlich sicher, dass es an der Initialisierung der Matrix liegt. Da ist irgendwas falsch. Die auskommentierte Zeile hatte ich zuerst verwendet und die sollte ja eigentlich auch richtig sein oder? Mit der geht es allerdings überhaupt nicht. Dann kommt zur Laufzeit ein Fehler ("DAMAGE: after normal Block #42 at...").
Benutze VC++6 Pro unter Win XP. Habe das Programm einem Kumpel gegeben, bei dem der Fehler angeblich nicht auftritt. Habe es dann noch einem anderen Kumpel gegeben, der hat denselben Fehler. Irgendeine Feinheit nicht beachtet, die compilerabhängig unterschiedlich behandelt wird???