C - Problem Array Funktionen Programmcode funktioniert nicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C - Problem Array Funktionen Programmcode funktioniert nicht

    Hallo,

    schreibe mit einem Freund grade an einer Studienarbeit und wir wollen unser Programm erweitern, um die Übersichtlichkeit zu bewahren wollen wir mehr mit Funktionen arbeiten.

    Ich verstehe in dem unten aufgeführten Programmcode einfach nicht warum der Compiler zwar compeliert, aber das Programm beim ausführen der EXE.Datei sagt:

    "a.exe funktioniert nicht.

    Es wird nach einer Lösung für das Problem gesucht."

    Ich denke/glaube das die Übergabe der Arrays in die Funktion bzw. aus der Funktion an das Hauptprogramm das Problem ist.

    Kann da natürlich völlig auf dem Holzweg sein und würde mich über Hilfe sehr freuen.

    Die letzte Programmiervorlesung ist schon etwas her und meine Fähigkeiten sind etwas eingerostet.

    Habe natürlich auch schon gegoogelt, geyoutubet und gebingt aber irgendwie konnt ich mein Problem nicht lösen.

    Danke schonmal vorab!

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>

    float auslesen (int &iAnz, int *x, int *y, int *AnzP);

    int main()
    {
    int iAnz, test;
    int *x, *y, *AnzP;

    AnzP = new int[63] ;
    x = new int[63] ;
    y = new int[63] ;

    auslesen (iAnz, x, y, AnzP);

    printf("%d\n", iAnz);

    }

    float auslesen (int &iAnz, int *x, int *y, int *AnzP)
    {
    FILE *datei ;
    datei = fopen("Koordinaten.dat","r") ;
    fscanf (datei, "%d",&iAnz) ;
    int i, a, b, c;

    AnzP = new int[iAnz+1] ;
    x = new int[iAnz+1] ;
    y = new int[iAnz+1] ;

    for(i=1;i<=iAnz;i++)
    {
    fscanf(datei,"%d %d %d %d",&a,&b,&c);
    AnzP=a;
    x[i]=b;
    y[i]=c;
    }
    };

    Quellcode

  • Nur überflogen ;)

    Nutze die Foren Code-Tags damit man den Quelltext besser lesen kann und Zeilennummer davor stehen.

    Quellcode

    1. for(i=1;i<=iAnz;i++)
    2. {
    3. fscanf(datei,"%d %d %d %d",&a,&b,&c); // hier stimmt etwas nicht - entweder ein "%d" zu viel oder ...


    Wenn du die ersten 3 Fehlermeldungen des Compilers zeigst, geht das mit der Antwort oft schneller. ;)

    Abfrage ob es mit dem öffnen der Datei geklappt hat vereinfacht eventuell nötige Fehlersuche.

    Nachtrag: Das sieht aus wie C-Quelltext mit Ausnahme des 'new'
    Keine Ahnung wie euer Prof/Lehrer das sieht. Eigentlich sollte man C und C++ unterscheiden. D.h. entweder statt new die entsprechende C-Funktion oder, wenn es C++ werden soll dann schreibt C++.

    Euer Compiler funktioniert. Das setze ich mal voraus. Die Fehlermeldung deutet darauf hin das ihr euch bei der Speicherreservierung verfranzt habt.
    Solche Fehlermeldungen fängt man sich hin und wieder, wenn man C und C++ nicht sauber trennt.

    Warum hat die Funktion keinen Rückgabewert?

    MfG bcc-fan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bcc-fan ()

  • Der Fehler liegt auf jeden Fall in der Codezeile die bbc-fan erwähnt.

    Ansonsten wenn man etwas reserviert/öffnet dann sollte man es auch freigeben/schliessen:
    new <-> delete
    new[] <-> delete[]
    malloc <-> free
    fopen <-> fclose

    Quellcode

    1. float auslesen (int &iAnz, int *x, int *y, int *AnzP)
    2. ...
    3. AnzP = new int[iAnz+1] ;

    Nach verlassen der Funktion wird der Speicherbereich nicht freigegeben(delete) und die Variable AnzP etc. in der main zeigt nicht auf den selben Speicherplatz wie die Variable in der Funktion auslesen.
    Dh. auf die Daten die du per scanf einliest kannst du nicht mehr zugreifen.

    Richtig wäre (C):

    Quellcode

    1. int iAnz=0;
    2. int *x=0;
    3. int *y=0;
    4. FILE *datei=0;
    5. datei = fopen("Koordinaten.dat","r") ;
    6. if (datei != 0)
    7. {
    8. fscanf (datei, "%d",&iAnz) ;
    9. if (iAnz >= 0)
    10. {
    11. x = (int*)malloc(sizeof(int)*iAnz);
    12. //...
    13. free(x);
    14. x = 0;
    15. }
    16. fclose(datei);
    17. datei = 0;
    18. }
    Alles anzeigen


    Mfg Rushh0ur
  • Hallo,

    ersteinmal Danke für die schnellen Antworten!

    Die erste Antwort hat mir sehr geholfen und jetzt läuft mein Programm.

    Hätte niemals gedacht das dieser kleine Fehler ein solches Problem verursacht. Wurde leider nicht durch den Kompiler angezeigt.

    Also Vielen Dank nochmal, werde demnächst bestimmt weiter Fragen aufkommen! ;)

    Schöne WE .... und Gruß