Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo @all

ich habe ein Problem mit einem C-Programm. Ich möchte Daten, die ich einlese in einen Stapel speichern und ich finde meinen Fehler nicht. Es funktionierte alles wunderbar, als ich in der Struktur tStapelElem nur einen Integer und einen Zeiger auf sich selbst hatte. Jetzt habe ich 2 Zeiger in dieser Struktur und das Programm stürzt an der entsprechenden Stelle immer ab.

mein Quellcode:

//die strukturen


struct tKarte {

	int zahl[4];

	int drehung;

	int typ;

};


struct tStapelElem {

	struct tKarte* pKarte;


	struct tStapelElem* pweiter;

};


//die funktionen

int einlesen(const char* File, struct tStapelElem* head) {

	FILE* input_File;


	if ((input_File = fopen(File, "r")) != NULL) {

		int i;

			struct tKarte buffer; //zwischenspeicher


		for(i=0; i < GROESSE; i++) {


			fscanf(input_File, "%d %d %d %d	%d", &buffer.typ, &buffer.zahl[0], &buffer.zahl[1], &buffer.zahl[2], &buffer.zahl[3]);

			//Stapel füllen

			stapel_einfuegen(&(*head), &buffer);

		}

		fclose(input_File);

		return 1;

	}

	else {

		msg("Datei kann nicht geöffnet oder nicht gefunden werden");

		return 0;

	}

}


//Stapelverarbeitung

void stapel_einfuegen(struct tStapelElem *head, struct tKarte *buffer){

	struct tStapelElem *pElem, *aktuell;


	aktuell = head;


	while (aktuell->pweiter->pweiter != NULL){

		aktuell = aktuell->pweiter;

	}


	pElem = (struct tStapelElem*)malloc(sizeof(struct tStapelElem));


	if(pElem != NULL){

		int i;


		pElem->pweiter = aktuell->pweiter;

		aktuell->pweiter = pElem;


		for(i=0; i<4; i++) {

			//in den folgenden Zeilen muss der Fehler liegen

pElem->pKarte->zahl[i] = buffer->zahl[i];

		}


		pElem->pKarte->typ = buffer->typ;

	}

}


Vielen Dank für Eure hilfe,

MfG,

Patrick

Geschrieben

Hallo,

danke erstmal für die schnelle antwort...

zum 2. Punkt hast recht, jetzt wo du es sagst, logisch... *grins*

zum 1. Punkt wie muss ich denn dazu noch speicher allocieren? Wenn ich mit einen Speicher vom struct tStapelElem allociere muss das doch reichen, der legt doch dann speicher in der entsprechenden Größe an. mit pweiter kann ich ja auch ohne probleme arbeiten.

MfG,

Patrick

Geschrieben
Original geschrieben von ph-online

Wenn ich mit einen Speicher vom struct tStapelElem allociere muss das doch reichen, der legt doch dann speicher in der entsprechenden Größe an.

Der Standardkonstruktur allokiert Speicher für jedes Element der Struktur. Es wird also Speicher für den Zeiger pKarte geholt. Keinesfalls wird automatisch Speicher für ein Objekt geholt, auf das pKarte dann zeigt.

mit pweiter kann ich ja auch ohne probleme arbeiten.
Die Verbindungszeiger einer verketteten Liste verweisen auf bereits angelegte Objekte, für die Du zuvor bereits Speicher allokiert hast.

Mach einfach aus dem Zeiger pKarte ein ganz normales Element, dann brauchst Du Dich darum nicht mehr zu kümmern.

Geschrieben

meinst du dann:


struct tStapelElem {

    int typ;

    int zahl[4]; usw...

    struct tStapelElem* pweiter;

}

???

ich denke mal schon, danke für die Hilfe. So funktioniert es natürlich.

So hatte ich es auch zuerst, aber ich dachte wenn ich es anders mache, dann ist die Struktur tKarte nicht nochmal in der Struktur tStapelElem angelegt.

Naja egal, werde dann mal weiter machen.

mfg, patrick

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...