Speicherzugriffsfehler mit strcasecmp.

Davicito

Erfahrenes Mitglied
In dem folgenden Code-Beispiel tritt immer (in Zeile 10 & 24 ) ein Fehler auf. und ich weiß nicht warum.
Dadurch kann ich in Zeile 21 & 32 nichts in meine Ausgabedatei schreiben/ anlegen. Ersetze ich strcasecmp durch etwas anderes, funktioniert wieder alles reibungslos und schreibt mir die Ergebnisse in meine Ausgabedatei und gibt mir die Ergebnisse auch auf meine Konsole wieder
C:
...
while(kopf != (aktl_Elem = aktl_Elem -> left))
			{				
				//! Wenn Listenelemente größer bzw. gleich groß sind werden diese ausgegeben.				
				if(strlen(aktl_Elem -> content) >= zahl && zahl >= 1 && strlen(aktl_Elem -> content) >= zahl && zahl >= 1)
				{	
					char* string1 = (char*) aktl_Elem -> content;		//!Wort des aktuellen Elements
					char* string2 = (char*) aktl_Elem -> left -> content;   //!Wort des linken Elements			
			
					if(strcasecmp(string1, string2) < 0)
					{
						printf(" %i. ", aktl_Elem -> nodeCounter);	
						wort = (char*) getcontent(aktl_Elem -> content);
						filename = (char*) getfilename(aktl_Elem -> dateiname);		
						printf(" %i", aktl_Elem -> lineCounter);
						
						if(strcasecmp((char*)aktl_Elem ->left-> content, (char*)aktl_Elem ->left-> left-> content) < 0)
						{						
							printf("\n");
						}							
						fprintf(file2,"%i %s %s %i\n", aktl_Elem -> nodeCounter, wort, filename, aktl_Elem -> lineCounter);
						//printf("\nFehler bei fprintf: %i\n\n", h);
					}
					else if (strcasecmp(string1, string2) == 0)
					{
											
						printf(", %i", aktl_Elem -> lineCounter);
						if(strcasecmp((char*) aktl_Elem ->left-> content, (char*)aktl_Elem ->left-> left-> content) < 0)
						{						
							printf("\n");
						}
						fprintf(file2,"%i ", aktl_Elem -> lineCounter);				

					}						
					//!Informationen werden anschließend in eine Textdatei einlesen
					//fprintf(file2,"%i %s %s %i\n", aktl_Elem -> nodeCounter, wort, filename, aktl_Elem -> lineCounter);				
				}											
			}
...

Was dieser CodeSchmipsel eigentlich macht ist, das es meinen Listeninhalt ausgibt auf der Konsole und legt eine Ausgabedatei an mit dem Listeninhalt. Dabei gibt mir die Liste immer den Listenindex, das Wort, der Dateiname in dem das Wort war und die Zeilennummer.

Die Liste ist schon lexigrapfisch sortiert und beinhaltet auch doppelt vorkommende Wörter. Was hier also passiert, ist das wenn ein wort doppelt vorkommt, nicht nochmal das Wort ausgegeben werden soll, sondern nur seine Zeilennummer hinter dem schon ersten Wort auf dem Bildschirm mit dessen Zeilennummer: 11. wort1 dateiname 4 5 6 7 8, und alle anderen Wörter werden normal ausgegeben : wort4 dateiname 5.
 
Zuletzt bearbeitet:
Das kann man so nur sehr schwer beantworten, wenn du sagst, dass das Problem bei strcasecmp auftritt und es zu einem Zugriffsfehler kommt würde ich mal spontan sagen, dass entweder string1 oder string2 nicht sauber 0-terminierte und gültige Strings sind.
 
Hi Muepe32, hab das Problem gelöst. und zwar musste ich in der While-Schleife noch etwas abfangen, damit die Schleife am Ende der Liste nicht irgendwie ein NULL-Element zurück gibt. Das hat zum Speicherzugriffsfehler geführt und auch somit verhindert, dass in meine Ausgabedatei etwas geschrieben wurde.

C:
...
while(kopf != (aktl_Elem = aktl_Elem -> left) && aktl_Elem -> left -> content != NULL)
{
...
}
..

Liebe Grüße.
 
Zuletzt bearbeitet:
Zurück