fehler bei devc++4.0



  • hallo, ich habe mir jetzt den devc++4.0 heruntergeladen, habe damit ein kleines programm geschrieben, welches er ohne fehler compeliert. aber wenn ich es ausführen möchte kommt folgende meldung:

    die anweisung in "0x77f8ed61" verweist auf speicher in "0x20202030". der vorgang "written" konnte nicht auf den speicher durchgeführt werden.
    klicken sie auf "ok" um das programm zu beenden
    klicken sie auf "abbrechen" um das programm zu debuggen

    mein BS ist windows 2000.
    und das einzige, was ich machen möchte ist, zwei textfiles in eines zusammenführen, und die alten leer neu anlegen.

    danke für eure hilfe.

    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        FILE *f,*h,*g;
        char nav[50]="d:\\w_test\\nav.txt";
        char f2w[50]="d:\\w_test\\f2w.txt";
        char temp[50]="d:\\w_test\\temp.txt";
    
        char *zeile;
    
        if ((f=fopen(nav,"rt")) && (h=fopen(f2w,"rt")))
        {
            g=fopen(temp,"wt");
    
            while(!(feof(f)))
            {
                while(fgets(zeile,1000,f)!=0)
                {
                    fputs(zeile,g);
                }
            }
            fclose(f);
    
            remove (nav);
            f=fopen(nav,"wt");
            fclose(f);
    
            while(!(feof(h)))
            {
                while(fgets(zeile,1000,h)!=0)
                {
                    fputs(zeile,g);
                }
            }
    
            fclose(h);
    
            remove (f2w);
            h=fopen(f2w,"wt");
            fclose(h);
    
            fclose(g);
            rename(temp,nav);
        }
        else { printf("\nFehler NAVISION\n\nBitte eine Taste drücken!!"); system("pause");}
        system("pause");
    
        return 0;
    }
    


  • hmm..
    ich würd mal sagen, dass Dein Problem nicht der DEV ist, sondern das Programm selber. Der Fehler passiert, wenn man in Pointer schreibt, die auf reservierte Speicher zeigen..

    Tipp: Debug das Ganze erst mal und zieh Dir den DEV 4.9.70

    cYa
    DjR



  • hmm ....
    ich hbe es jetzt mit der version 4.9.7 ausprobiert.
    er kompeliert es zwar, und bringt mir beim ausführen keine fehlermeldung, aber er macht es nicht.
    kann es sein, daß er den befehl
    system("pause"); ignoriert?

    muß man etwas in den compileroptionen einstellen, damit der code funktioniert?

    grüße



  • Der Code ist fehlerhaft, da hilft keine Compilereinstellung 😉

    Du schreibst mit fgets() in 'zeile' obwohl für Zeile garkein Speicher reserviert ist. Also entweder zeile[1000] oder vorher ein malloc() und später ein free().



  • danke, jetzt funktionierts, so einfach kanns sein.
    beim bolandc++3.0 hat es jedoch nur so funktioniert. also dachte ich fgets() braucht immer einen pointer.
    aber das das von hersteller zu hersteller verschieden ist.

    aber trotzdem nohmals danke für die hilfe.

    grüße



  • Original erstellt von thork:
    **... beim bolandc++3.0 hat es jedoch nur so funktioniert. also dachte ich fgets() braucht immer einen pointer.
    aber das das von hersteller zu hersteller verschieden ist...
    **

    na da empfehle ich dir mal irgendein C/C++-Buch zu lesen. Dein Quelltext da ist immer falsch - hat absolut nichts mit dem Compiler zu tun 😉

    fgets() braucht zwar einen pointer, aber eben auch einen, der auf genug Speicherplatz zeigt.


Anmelden zum Antworten