mehrdimensionaler Array aus eigenen Datentypen
Verfasst: Fr Jan 31, 2020 2:55 pm
Hallo zusammen,
habe folgendes Problem. Ich versuche gerade Minesweeper in C zu programmieren. Dafür wollte für jedes Feld ein Datentyp generieren der alle nötigen Informationen enthält dieser muss mehrdimensional verfügbar sein und als Pointer an alle benötigten Funktionen übergeben werden Damit drauf zugegriffen werden kann. Das funktionier bei mir Leider nicht!
Ich bekomme Immer einen Speicherzugriffsfehler wenn ich auf ein Feld in dem Array zugreifen möchte. Was mache ich da Falsch?
Vielen Dank im voraus für Hilfe!
habe folgendes Problem. Ich versuche gerade Minesweeper in C zu programmieren. Dafür wollte für jedes Feld ein Datentyp generieren der alle nötigen Informationen enthält dieser muss mehrdimensional verfügbar sein und als Pointer an alle benötigten Funktionen übergeben werden Damit drauf zugegriffen werden kann. Das funktionier bei mir Leider nicht!
Ich bekomme Immer einen Speicherzugriffsfehler wenn ich auf ein Feld in dem Array zugreifen möchte. Was mache ich da Falsch?
Vielen Dank im voraus für Hilfe!
Code: Alles auswählen
// Bibliotheken einbindung
#include <stdio.h>
#include <stdlib.h>
// Definition der verwendeten Konstanten
#define MAX_SPIELFELD 26 // Maximale Zeilen und Spaltenzahl
#define MIN_SPIELFELD 10 // Minimale Zeilen und Spaltenzahl
// Zur Darstellung der Zustände eines Feldes
typedef struct {
int Bombe; // 1 falls Mine sonst 0
int Umgebung; // 1 falls Markierung gesetzt sonst 0
int Markierung; // 0->8 Anzahl der Angrenzenden Anzahl Minen
int Aufgedeckt; // 0 falls Feld verdeckt sonst 1 bereits aufgedeckt
} sFeld;
// Hauptprogramm
int main(int argc, char *argv[]){
int Zeilen=0, Spalten=0; // Gewüschte Spielfeldgroesse
int StructGroesse = 0; // Groesse des struct's fuer das Spielfeld
sFeld * Spielfeld;
// Fehlerbehandlung des Komandozeilenparameter Aufrufs
if(argc != 4){ // Test, dass genau drei Parameter übergeben werden
printf("\nDas Programm wurde mit falschen Komandozeilenparametern aufgerufen");
printf("\nKorrekter Aufruf mit : ./POOL3_006 <A> <B> <C>");
printf("\nA : Dateiname zum speichern des Spieldeldes");
printf("\nB : Anzahl der m Zeilen des Spielfeldes");
printf("\nC : Anzahl der n Spalten des Spielfeldes\n");
return -1;
}
else if(atoi(argv[2]) < MIN_SPIELFELD || atoi(argv[2]) > MAX_SPIELFELD || atoi(argv[3]) < MIN_SPIELFELD || atoi(argv[3]) > MAX_SPIELFELD){ // Kontrolle Spielfeldgrösse 10<=n,m<=26
printf("\nDas Spielfeld muss in folgendem Intervall liegen : %i <= n,m <= %i\n",MIN_SPIELFELD,MAX_SPIELFELD);
return -1;
}
else{
// Speicherreservierung für unser mehrdimensinales Array der einzenen struct Felder
Zeilen=atoi(argv[2]);
Spalten=atoi(argv[3]);
StructGroesse = Zeilen * Spalten;
Spielfeld = (sFeld *) calloc(StructGroesse, sizeof(sFeld));
if(Spielfeld == NULL){ // Fehlermeldung falls der Speicher nicht alloziert werden kann
printf("\nNicht genügend Speicherplatz!");
return -1;
}
// Das Spielfeld wird erstellt
Erstelle_Spielfeld(argv, Spielfeld);
return 0;
}
}
// Spielfeld erstellen
void Erstelle_Spielfeld(char * argv[], sFeld * Spiel[atoi(argv[2])][atoi(argv[3])]){
printf("Klappt!\n");
Spiel[1][1]->Bombe=1;
Spiel[3][3]->Bombe=1;
/*
printf("Test: %i %i",Spiel[0][0]->Bombe, Spiel[3][3]->Bombe );
*/
}