Pointer übergabe für Speicher freigabe
-
Moin. Mein Problem. Ich möchte Speicher freigeben. Kriege dann aber ein paar warnings. Das Programm Funktioniert möchte die warnings aber verstehen.
Als Fehlermeldng bekomme ich:
-->warning C4047: 'function' : Anzahl der Dereferenzierungen bei 'int ' und 'int *'unterschiedlich-->warning C4024: 'Tabelle_Speicher' : Unterschiedliche Typen fuer formalen und uebergebenen Parameter 2
-->warning C4047: 'function' : Anzahl der Dereferenzierungen bei 'struct mannschaft_t ** ' und 'struct mannschaft_t *' unterschiedlich
-->warning C4024: 'Spielplan_Speicher' : Unterschiedliche Typen fuer formalen und uebergebenen Parameter 5
Ich übergebe diese Paramter an die Funktion txt_laden siehe:
int txt_laden(mannschaft_t **Teams, int *anz_m, int *anz_t, int *anz_p, char *man_eingegeben,paarung_t ***Spielplan, char *splan_erstellt, int *offene_spieltage,int *spieltage_eingegeben, mannschaft_t *Tabelle){
Nun möchte ich Speicherreservieren mit Tabelle_speicher und Spielplan_speicher.
Wenn nun in Tabelle_speicher oder dem anderen ein Fehler auftritt sollen alle anderen reservierten Speicherplätze auch freigegeben werden.Ich weiß nicht ob es Funktioniert also das freigeben.Hatte bis jetzt immer genug Speicherplatz.
Habe ich das hier richtig gemacht? Naja kann ja nicht so ganz richtig sein sonst würde es keine Warnungen geben.
Wie muß man das denn richtig machen.
DankeFunktionsaufrufe
Tabelle_Speicher(&Tabelle, anz_m, Teams); Spielplan_Speicher(Spielplan, *anz_t, *anz_p, Teams, Tabelle);
Funktionen
int Tabelle_Speicher(mannschaft_t **Tabelle, int anz_m, mannschaft_t **Teams){ (*Tabelle) = (mannschaft_t *)malloc((anz_m+1) * sizeof(mannschaft_t )); //Speicher reservieren für Tabelle if( (*Tabelle) == NULL ){ // Kein Speicher Abbruch und den anderen Speicher freigeben Error(8); free(*Teams); } return EXIT_SUCCESS; }
int Spielplan_Speicher(paarung_t ***Spielplan, int anz_t, int anz_p, mannschaft_t **Teams, mannschaft_t **Tabelle){ int i,u; (*Spielplan) = (paarung_t **)malloc((anz_t+1) * sizeof(paarung_t *)); // Speicherplatzreservierung Spieltage if(*Spielplan == NULL){ // Enn kein Speicher Abbruch free(Teams); free(Tabelle); Error(2); } for(i=1; i <= anz_t; i++){ // Schleife fürSpeicherplatzreservierung Paarungen pro Spieltag (*Spielplan)[i] = (paarung_t *)malloc((anz_p+1) * sizeof(paarung_t)); // Reservierung if((*Spielplan)[i] == NULL){ // Wenn kein Speicher. Anderen Speicher freigegeben nd dann Abbruch for(u = 1; u <= i; u++){ // Schleife für freigabe free(Spielplan[u]); } free(*Spielplan); free(*Teams); free(*Tabelle); Error(3); } } return EXIT_SUCCESS; }
-
du hast fehler nicht in den funktionen, sondern in den aufrufen.
du hast die verlangten pointer falsch uebergeben.komplett lesen: http://www.pronix.de/pronix-623.html