Array im Struct fehler bei system("cls")



  • Moin Moin

    Also mein problem sieht folgender Maßen aus:

    //im header
    struct txt
    {
    	char aus[110];              //<- string mit 110 zeichen
    };
    
    struct daten
    {
    	struct zimmer *zimmer_anf;
    	struct zimmer *zimmer_end;
    	struct user *user_anf;
    	struct user *user_end;
    	struct user *logedin;	
    	struct txt ausgabe[100];      //<- 100mal den string mit 110 zeichen
    	int beenden;
    
    };
    
    //in der main
    
    struct daten *daten;
    	int i=0;
    
    	daten=(struct daten *) malloc (sizeof(daten));
    	daten->logedin=NULL;
    	daten->user_anf=NULL;
    	daten->user_end=NULL;
    	daten->zimmer_anf=NULL;
    	daten->zimmer_end=NULL;
    
    //hab hier mal was sinfreies eingebaut um den fehler zu lokalisieren
            for (i;i<100;i++)
    	{
    		strcpy(daten->ausgabe[i].aus,"bla");
    		system("cls");                          //<-Fehler  :open_mouth: 
    	}
    

    Beim 12 Durchlauf kommt da:
    Unbehandelte Ausnahme bei 0x1022fb10 in HotelBS.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x6c623c08.

    vorher schreibt der halt schön "bla" in jeden einzelnen string.
    Der fehler wird erst beim Kommando cls ausgegeben. Wenn ich kein cls mache kann ich mein struct auch schön mit daten füllen und es is auch alles richtig, aber sobald cls angesprochen wird... 😡

    Was soll das. Hat da einer Ahnung. Macht C probleme bei großen Arrays?
    HILFEEEEE!!!!

    MfG Phil



  • evtl. ein padding problem

    sehr komisch... hast mal versucht die array kleiner anzulegen?



  • also wenn ich char aus[22] und txt ausgabe[40] setze gehts bis i=31. Wenn ich char aus[100] und ausgabe[10] setze gehts bis i=7... 😞 😞 😞 😞



  • //in der main

    struct daten odaten;
        int i=0;
    
        //daten=(struct daten *) malloc (sizeof(daten));
        odaten.logedin=NULL;
        odaten.user_anf=NULL;
         odaten.user_end=NULL;
        odaten.zimmer_anf=NULL;
        odaten.zimmer_end=NULL;
    
    //hab hier mal was sinfreies eingebaut um den fehler zu lokalisieren
            for (i;i<100;i++)
        {
            strcpy(odaten.ausgabe[i].aus,"bla");
            system("cls");                          //<-Fehler   
        }
    

    was passiert wenn du e so machst?



  • 😡 soen mist .. danke hab den fehler gefunden.. der wurde mir auch angezeigt als ich das mal in odaten umbenannt hab...

    so muss es sein:

    daten=(struct daten *) malloc (sizeof(struct daten));
    

    hatte bei sizeof(struct daten) das struct vergessen und da ich ja auch en zeiger daten hatte hat der keinen fehler angezeigt... bää hab da stunden davorgesessen...

    🙂 🙂 🙂 aber jetzt alles fein 🙂 🙂 🙂

    DANKE.



  • Und malloc casten solltest du auch nur wenn usw.



  • struct daten *daten;
    

    das hab ich mir gedacht, wieso nennst du den zeiger auf daten gleich wie der typ?? mach lieber

    struct daten *pDaten;
    

    P.S: free() nich vergessen.....



  • bgdnoy schrieb:

    Und malloc casten solltest du auch nur wenn usw.

    wenn? wenn was?
    normalerweise nicht, höchstens vielleicht wenn man den rückgabewert einem 'long' zuweisen will oder sowas seltsames.
    🙂



  • In meinem struct sind ja mehrere verkettete listen drinnen.. muss ich erst alle listenelemente einzeln freen oder werden alle sofort gefreet wenn ich free(daten) mache??



  • in der struktur wie du elemente etc. mit malloc anlegst musst du sie rückwierkend auch so wieder frei geben



  • aha. DANKE



  • freak schrieb:

    bgdnoy schrieb:

    Und malloc casten solltest du auch nur wenn usw.

    wenn? wenn was?

    Wenn man befürchet, daß jemand das Programm durch einen C++Compiler jagen wird. Wenn man das konsequent betriebe, könnte jemand kommen und sagen:

    #define void (char)
    

Anmelden zum Antworten