2016-10-24 5 views
1

Ich arbeite an einer Programmieraufgabe in C, in der es um die Basisautomatisierung für Kinos geht.Erstellen eines Strukturarrays in C

Für Daten der Hallen halten, definiere ich eine Struktur wie folgt aus:

typedef struct { 
char *hallName; 
char *movieName; 
seat** hallSeats; 
int studentCount; 
int fullFareCount; 
int totalSum; 
int width; 
int height; 
}Hall; 

So bin ich eine Textdatei mit Befehlen gegeben und wenn ich mit einem bestimmten Befehl kam, sollte ich eine separate Halle erstellen. Aus diesem Grund habe ich eine andere Funktion dafür geschaffen.

Da ich mehrere Hallen haben werde, habe ich ein Hall-Array erstellt, um später darauf zugreifen zu können.

Hall *allHalls = malloc(sizeof(Hall) * 10); /*Hall placeholder*/ 

Während ich über die Zeilen iteriere, überprüfe ich Befehle und erstelle Hallen oder verkaufe Tickets.

Hall *allHalls = malloc(sizeof(Hall) * 10);      /*Hall placeholder*/ 
FILE *f; 
f = fopen("input.txt", "rt"); 
char *line = malloc (sizeof(char) * 200); /*LINE HOLDER*/ 
int currentLineNumber = 0; 
char *tmp; 
int hallNumber = 0; 

while (1) {  /*PARSING FILE*/ 
    if (fgets(line,200, f) == NULL) break;  /*FILE END CHECKER*/ 
    currentLineNumber++; 
    tmp = strtok(line," "); 
    char **temp = malloc(sizeof(char*) * 6); 
    int currentWordNumber = 0; 

    while(tmp != NULL)  /*PARSING LINES*/ 
    { 
     temp[currentWordNumber] = malloc(strlen(tmp) + 1); 
     strcpy(temp[currentWordNumber],tmp); 
     tmp = strtok (NULL, " "); 
     currentWordNumber++; 
    } 
    if(!strcmp("CREATEHALL",temp[0])) 
    { 
     allHalls[hallNumber] = makeHall(temp); /*<<<<<<<PROBLEM*/ 
     hallNumber++; 
     printf("%d\n",hallNumber); 
    } 

Nun, das ist der Teil, ich bin verloren. Wann immer ich versuchte, auf das Array zuzugreifen, stürzte das Programm ab.

Ich dachte, es war ein Speicherproblem, so erhöhte Speicher von Malloc für AllHalls auf 40 (obwohl es kein Problem sein sollte, da Datei nur 3 verschiedene Hallen gibt) und Programm nicht mehr abstürzt, sondern überschreibt die vorherige Halle in der Anordnung.

Ich versuchte mehrere Lösungen, aber keine von ihnen kam irgendwie gut aus, so dass ich das am nächsten komme.

Ich habe Gebrauch viel vor Java, so dass ich immer noch zu OOP stecken und ziemlich neu in C

EDIT Sitz als

definiert ist
typedef struct { 
char rowLetter; 
int seatNumber; 
char seatTaken; 

}seat; 

auch Beispiel createhall Befehl ist

CREATEHALL Hall_A Avatar 24 20 

während die Zahlen am Ende der Breite und Höhe für Halle

sind

EDIT: CODE

+0

Können Sie uns zeigen, wie eine Beispieldatei aussieht? Und wie ist 'Sitz' definiert? – Elyasin

+0

Bitte geben Sie die Definition von "Sitz" an. –

+0

Sie zeigen nicht, wie 'hallNumber' deklariert oder initialisiert wird, und ich sehe nichts, um zu verhindern, dass es die Anzahl der Einträge in' allHalls' überschreitet. –

Antwort

2

habe ich den Fehler:

Am unteren Rand des while(1) Schleife in main Sie so jetzt ein free(allHalls); tun gibt es keine weiteren Hallen und Sie segfault bekommen ...

Es war in dem Code, den Sie uns nicht gezeigt haben:

while (1) { 
    ... 
    if(!strcmp("CREATEHALL",temp[0])) 
    { 
     allHalls[hallNumber] = makeHall(temp); /*<<<<<<<PROBLEM*/ 
     hallNumber++; 
     printf("%d\n",hallNumber); 
    } 
    .... 
    free(temp); 
    free(allHalls);  // <-- there's your bug 
} 
fclose(f); 
free(line); 
+0

das scheint wahr danke :) – honorlessman

+0

Als nachmittags: Sie hätten dies selbst gefunden, wenn Sie das Programm durch den Debugger getreten haben. Benutze deine Werkzeuge! –

Verwandte Themen