Seltsamer Fehler mit Arrays



  • Hi,
    ich bastel an einem Programm, welches die Konvexe Punkthülle im 2D berechnen soll.
    Dummerweise tritt schon beim einfachsten Schritt ein mir unerklärlicher Fehler auf:

    #include <math.h>
    #include <conio.h>
    #include <iostream>
    using namespace std;
    
    int pmin(int X[], int X[], int);
    
    int main()
    {
        int X[]={1,2,-1,2,8};
        int Y[]={2,6,0,3,5};
        int *E;
        int n;
        int l=0;
    
        n=sizeof(X)/sizeof(int);
    
        for(int i=0; i<n; i++) //Punkte werden ausgegeben
        {
                cout << "P" << i+1 << "\t=\t(" << X[i] << "," << Y[i] << ")\n";
        }
    
        E[0]=pmin(X, Y, n);
        cout << "\nEcke 1\t=\t(" << X[E[0]] << "," << Y[E[0]] << ")\n\n";
    
        for(int i=0; i<n; i++) //Punkte werden erneut ausgegeben
        {
                cout << "P" << i+1 << "\t=\t(" << X[i] << "," << Y[i] << ")\n";
        }
        getch();
    }
    
    int pmin(int X[], int Y[], int n)
    {   
        int k=0;
        for(int i=1; i<n; i++)
        {
                if(Y[k]>Y[i])
                {
                            k=i;
                }
                else
                {
                    if(Y[k]==Y[i] && X[k]>X[i])
                    {
                                 k=i;
                    }
                }
        }           
        return k;
    }
    

    Nicht wundern, das ist nicht das ganze Programm. Ich hab nur die kritische Stelle herausgezogen.
    Wenn ich das Prog. mit oben initialisierten Feldern X und Y laufen lasse, stimmt alles (jeweils 5 Werte). Wenn ich aber nur 3 oder 4 Werte einsetze, spuckt mir das Prog beim zweiten mal Ausgeben der Punkte für den 3. X-Wert immer einen falschen Wert aus.
    Der Fehler muss irgendwo in der Funktion pmin liegen. Ich find ihn aber einfach
    nicht.
    Und das Seltsame ist, dass er bei +5 Werten nicht auftritt.

    Zur Info: ich benutze Dev-C++ 4.9.9.2

    Schon mal Danke im Voraus,
    schmitzlipp



  • schmitzlipp schrieb:

    #include <math.h> // in C++ heißt dieser Header <cmath>!
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    int pmin(int X[], int X[], int); // Zweimal X!? Sicher ein Tippfehler
    
    int main()
    {
        int X[]={1,2,-1,2,8};
        int Y[]={2,6,0,3,5};
        int *E;
        
        // ...
    
        E[0]=pmin(X, Y, n);
    
        // ...
    
        getch(); // < nicht schön...
    }
    

    Die Zuweisung an E[0] ist reines Glücksspiel, da nie Speicher reserviert wird und E in's Nirvana zeigt.

    cheers, Swordfish



  • Wenn du im Vorfeld weißt, wieviele Elemente E (maximal) haben wird, dann kannst du diese fix deklarieren. Ansonsten musst du dynamisch Speicher mit new anfordern.

    Übrigens wäre dein Beitrag besser im C++-Board aufgehoben:

    http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html



  • Eventuell noch ein Zusatz zu dem was schon gesagt wurde. Wenn möglich solltest du unbedingt deine IDE wechseln, der Dev C++ ist veraltet und wurde schon ewig nicht mehr weiterentwickelt.
    Alternativen wären zum Beispiel Code::Blocks oder Visual Studio 2008 Express(oder Professionell wenn du an eine Lizenz kommst).



  • Thx, ich werd ma gucken was ich machen kann.
    An ein Lizens von Visual Studio 2008 Professionell komm ich ran, ich hatte das auch schon mal drauf, aber sah ertreme unübersichtlich aus und da wurde ein haufen Rotz den ich nicht brauche mit installiert.



  • Den Rotz kannst du doch bei der Installation abwählen...


Log in to reply