lothar_matthäus
Mitglied
Halli Hallo,
ich habe nen kleines Problem mit einem dynamisch allozierten 2D-Array.
Ich möchte ein 2D-Array mit malloc allozieren und dann mit Funktionen bearbeiten.
Im folgenden Code wird das allozierte Array zum einen in
einer Funktion befüllt und dann durch eine andere ausgegeben.
(Das hat erst einmal keinen tieferen Sinn, halt nur für didaktische Zwecke)
Wenn ich das Array "extern" befüllen möchte bekomme ich sofort einen Speicherzugriffsfehler.
Wenn ich das Array innerhalb der main-Funktion befülle bekomme ich
irgendwelche Zahlen ausgegeben... also es wird von irgendwo im Speicher gelesen.
Hat jemand vielleicht eine Idee was mir hier schief gelaufen ist?
In 1D funktioniert es super, und wenn ich das Array in der Variablen Deklaration fest setze funktioniert es auch prima... .
Wie bekommt man den Code so schön farb-codiert?
Gruß
LM
ich habe nen kleines Problem mit einem dynamisch allozierten 2D-Array.
Ich möchte ein 2D-Array mit malloc allozieren und dann mit Funktionen bearbeiten.
Im folgenden Code wird das allozierte Array zum einen in
einer Funktion befüllt und dann durch eine andere ausgegeben.
(Das hat erst einmal keinen tieferen Sinn, halt nur für didaktische Zwecke)
Wenn ich das Array "extern" befüllen möchte bekomme ich sofort einen Speicherzugriffsfehler.
Wenn ich das Array innerhalb der main-Funktion befülle bekomme ich
irgendwelche Zahlen ausgegeben... also es wird von irgendwo im Speicher gelesen.
Hat jemand vielleicht eine Idee was mir hier schief gelaufen ist?
In 1D funktioniert es super, und wenn ich das Array in der Variablen Deklaration fest setze funktioniert es auch prima... .
C++:
#include <stdio.h>
#include <stdlib.h>
void func2D_print();
void func2D_init();
int main(void){
int i, j, k, m, n;
int array2d_init, array2d_print;
int **array2D;
/* Arraygröße */
m=5;
n=5;
/* *------------------- SCHALTER ----------------------------* */
/**/ /*0= in main initialisieren , 1= durch Funktion initialisieren*/
/**/ array2d_init=0;
/**/ /*0= in main ausgeben, 1= durch Funktion ausgeben*/
/**/ array2d_print=0;
/* *---------------------------------------------------------* */
/* -------------------- ALLOZIEREN -------------------------* */
/**/ /* 2D ARRAY MALLOC */
/**/ array2D = (int **)malloc( m*sizeof(int *) );
/**/ if(NULL==array2D){ printf("Fehler 1\n"); return EXIT_FAILURE;}
/**/ for(i=0;i<n;i++){
/**/ array2D[i]= (int *)malloc( n*sizeof(int) );
/**/ if(NULL==array2D[i]){ printf("Fehler 2\n"); return EXIT_FAILURE;}
/**/ }
/* ----------------------------------------------------------* */
/* *-------- Initialisierung über main ODER Funktion --------* */
/**/ /* Initialisierung durch main Funktion*/
/**/ if(!array2d_init){
/**/ k=0;
/**/ for(i=0;i<m;i++){
/**/ for(j=0;j<n;j++){
/**/ array2D[i][j]=k;
/**/ k++;
/**/ }
/**/ }
/**/ }
/**/
/**/ /* Initialisierung über externe Funktion */
/**/ if(array2d_init){
/**/ func2D_init(&m, &n, array2D);}
/* *---------------------------------------------------------* */
/* *----------- Ausgabe über main ODER Funktion -------------* */
/**/ /* Ausgabe durch main Funktion */
/**/ if(!array2d_print){
/**/ for(i=0;i<m;i++){
/**/ for(j=0;j<n;j++){
/**/ printf("array2D[%d][%d]: %d\n",i,j,array2D[i][j]);}}
/**/ }
/**/
/**/ /* Ausgabe über externe Funktion*/
/**/ if(array2d_print){
/**/ func2D_print(&m, &n, array2D);}
/*-----------------------------------------------------------* */
return 0;
}
/* *-------------------- Funktionen -------------------------* */
/**/ /*Ausgabe*/
/**/void func2D_print(int *m, int *n, int array2D[][*n])
/**/{
/**/ int i,j;
/**/ for(i=0;i<*m;i++){
/**/ for(j=0;j<*n;j++){
/**/ printf("array2D[%d][%d]: %d\n",i,j,array2D[i][j]);}}
/**/}
/**/
/**/ /*Array befüllen*/
/**/void func2D_init(int *m, int *n, int array2D[][*n])
/**/{
/**/ int i,j,k;
/**/
/**/ k=0;
/**/ for(i=0;i<*m;i++){
/**/ for(j=0;j<*n;j++){
/**/ array2D[i][j]=k;
/**/ k++;}}
/**/}
/* *---------------------------------------------------------* */
Wie bekommt man den Code so schön farb-codiert?
Gruß
LM
Zuletzt bearbeitet von einem Moderator: