Zeile doppelt...



  • Hi!
    Ich lese mit dieser function eine Zeile aus ner txt-datei:

    char *LibExtStr::ReadLine(FILE *pFile) {
    
    		char line[256];
    			fgets(line, 256, pFile);
    
    		return line;
    	}
    

    (im test prog tu ich das 2 mal)
    aber ich bekomme nur die letzte zeile der datei 2mal ausgegeben ...

    FILE *pF = fopen("readlinetest.txt", "r");
    	if(!pF) printf("Datei fehler!\n");
    	char *strLine1 = new char[256]; 
    			strLine1 = LibExtStr::ReadLine(pF);
    	char *strLine2 = new char[256]; 
    			strLine2 = LibExtStr::ReadLine(pF);
    	printf("FirstLineFromFile: %s\nSecondLineFromFile: %s\n", strLine1, strLine2);
    	fclose(pF);
    

    weiss wer wo der fehler liegt? da bringt mich echt zur verzweifelung...

    greets,
    5th



  • lies dir nochmal etwas zum thema zeiger durch.

    ReadLine ist falsch, denn du returnst einen zeiger auf ein lokales array

    dieses array hoert aber beim return bereits auf zu existieren -> folglich zeigen deine 2 zeiger ins nirvana. (undefiniertes verhalten entsteht, und alles was dann noch passiert ist glueck oder pech - wie mans nimmt)



  • hm, kappier ich nicht so ganz, wie muss das denn anders aussehen?
    wenn ich
    char *line = new char[256];
    mache, futntz es auch nicht



  • lies dir noch was zu zeigern durch und beantworte mir dann folgende fragen:

    was passiert hier?
    char* p=new char[100];
    p="Hallo";
    delete [] p;

    wo ist der unterschied zwischen
    char* p=new char[100];
    p="Hallo";
    delete [] p;

    und
    char* p=new char[100];
    strcpy(p,"Hallo");
    delete [] p;



  • ist doch alles samt das selbe?
    1. array initialisieren
    2. p den wert Hallo zuweisen
    3. speicherbereich von p löschen

    greets,
    cNcMasta

    p.s: ich meld mich jetzt mal an 🙂



  • dann lies mal was ueber zeiger.

    p="Hallo";
    p zeit nun auf "Hallo"

    strcpy(p,"Hallo");

    der text "Hallo" wird in den speicherbereich kopiert, auf den p zeigt.

    p=new char[10];
    p zeigt auf 10 freie bytes im speicher

    p="Hallo";
    p zeigt nun auf "Hallo"
    niemand zeigt mehr auf die 10 freien bytes -> Memory Leak



  • irgendwie bin ich heute dumm 😞
    ich hab was über zeiger gelesen, aber irgendwie fällt mir gar keine lösung für mein prog ein 😞 😞

    kannst du dich vielleicht erbarmen und mich nicht länger im dunkeln tappen lassen?

    greets,
    cNc


Anmelden zum Antworten