Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Anwendung stürzt immer ab

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.08.2002, 02:12 Uhr
~para
Gast


tja, Anwendung wird geschlossen, ich weiß nicht wo der Fehler liegt

C++:
#include <iostream.h>
void mySort(int *iToSort, int iSize)
{
    int min;
    int temp;
    int k;
    int j;
    min = iToSort[0];
    while (k <= iSize)
    {
        j = k;
        while (j <= iSize)
        {    
            
            if (iToSort[j] < min)
            {
                min = iToSort[j];    
            }
        j++;    
        }
    temp = iToSort[k];
    iToSort[k] = iToSort[j];
    iToSort[j] = temp;    
    k++;
    }
    
    int a;
    while(a <= iSize)
    {
        cout<<iToSort[i]<<",";
        a++;
    }
}

int main(int argc, char* argv[])
{
    int array[5]={3,2,4,1,5};
    mySort(array,5);

    return 0;
}


jo, und zwar immer an der Stelle:

C++:
                                       if (iToSort[j] < min)
            {
                min = iToSort[j];    
            }


Wenn in dem Block der Bedingung allerdings nix steht, läufts, also muss mein Fehler irgendwo da sein, ich find ihn allerdings net :-(
please help
thx para

Dieser Post wurde am 27.08.2002 um 06:21 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.08.2002, 08:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
probier mal deine Funktion wie gefolgt aufzurufen:


C++:
//...
int array[5] = {3,2,4,1,5};
mySort(array,4);
//...



Da du immer <= iSize schreibst, geht er immer von 0 - 5 (6 Durchläufe) und nicht von 0 - 4 (5 Durchläufe)

Dadurch das das Array aber nur von 0 - 4 geht, stürzt er beim zugriff auf nummer 5 ab!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.08.2002, 17:44 Uhr
~para
Gast


nö, hilft nix, stürzt trotzdem ab :-(
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.08.2002, 18:08 Uhr
Tommix



Hallo,
Du initialisiert ein paar Variablen nicht (k, a).
Außerdem steht da:

C++:
...

    }
    j++;    
}
temp = iToSort[k];
iToSort[k] = iToSort[j];
iToSort[j] = temp;    



so daß j selbst bei beachten von FloSofts richtigem Hinweis immer noch eins zu groß werden kann. Laß mal im Einzelschrittmodus durchlaufen und sieh Dir die Variablen an.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.08.2002, 19:41 Uhr
~para
Gast


also, dass mit k, steht in meinem Quelltet nicht, da steht für k immer i, muss nen Tippfehler sein, also in meinem Quelltext stimmt das. ausserdem, stürzt es immer an der Stelle ab:


C++:
if (iToSort[j] <= min)
            {

                min = iToSort[j];
            }



wenn ich min = iToSort[j]; weglasse nicht. aber sobald da irgendwas steht, isses vorbei.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.08.2002, 22:39 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,

Zitat:
~para postete
also, dass mit k, steht in meinem Quelltet nicht, da steht für k immer i, muss nen Tippfehler sein, also in meinem Quelltext stimmt das.

Sorry mein Fehler, habe den Quelltext editiert gehabt, da wenn i in [] steht das Script spinnt.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.08.2002, 14:58 Uhr
~para
Gast


jo, und warum gehts jetzt net? ;-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.08.2002, 16:02 Uhr
Volle



Hallo para,

also ich habe den Code jetzt mal so umgeschrieben, dass er läuft. Wenn du es jetzt mal debuggen tust, dann wirst du sicher schnell die Fehler finden, warum es nicht richtig sortiert.

Wenn nicht, dann melde dich nochmal.

Gruß, Volle.


C++:
#include <iostream.h>

void mySort(int *iToSort, int iSize)
{
    int min;
    int temp;
    int k = 1;
    int j;
    min = iToSort[0];

    while (k </*=*/ iSize)
    {
        j = k;

        while (j < iSize)
        {    
            if (iToSort[j] < min)
            {
                min = iToSort[j];    
            }

            j++;    
        }

        temp = iToSort[k];
        iToSort[k] = iToSort[j];
        iToSort[j] = temp;    
        k++;
    }
    
    int a;

    while(a < iSize)
    {
        cout<<iToSort<<",";
        a++;
    }
}

int main(int argc, char* argv[])
{
    int array[5]={3,2,4,1,5};
    mySort(array,5);

    return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.08.2002, 14:45 Uhr
~para
Gast


komme mir grad voll blöd vor
also, warum nur < und nicht <= ist mir klar, bei 5 Elementen gehts von 0 bis 4, hab ich übersehen, aber warum dann k = 1? wenn ich das jetzt ausführe, bekomm ich endlos, cryptische Zeichen ;-)
was mir noch aufgefallen ist, zum richtigen sortieren (wenns dann überhaupt mal laufen würde, müsste ich hier
if (iToSort[j] < min)
{
min = iToSort[j];
}

noch aus der schleife springen, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.08.2002, 16:37 Uhr
Volle



Hallo para,

k = 1 weil sonst dein Compiler die Werte mit -895425 oder was weiß ich vorbelegt. Das merkst du aber, wenn du dein Programm mal debuggst.

Was für eine Entwicklungsumgebung hast du denn?

Das gleiche gilt für

int a;

Danach hat a irgendeinen undefinierten Wert - meistens auch wieder irgedwas wie -8956542.

Deshalb läuft


C++:
while(a < iSize)
    {
        cout<<iToSort<<",";
        a++;
    }


ziemlich oft durch und gibt dir die Adresse (im Speicher) deines Arrays aus.

Wenn die Schleife deine Elemente aus dem Array ausgeben soll , dann brauchst du den Index.

Also so


C++:
cout<<iToSort[a]<<",";


Aber dann darfst du nicht vergessen vor der Schleife a auch zu initialisieren. Sonst kracht es wieder.

Alles klar?

Gruß, Volle.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: