While schleife bricht bei erstellen von Autos einfach ab

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Community,
    ich habe folgendes Problem und bitte um Hilfe,
    Eine Funktion berechnet eine Zufällige zahl von autos, und parkt die zufällig auf parkplätzen aber mitten in einer whileschleife wird abgebrochen.


    printf("\n\n\n\n\n\nStart");
    rnd = random(sizeof RandomCarPositions);//Zufällige Anzahl autos
    new ZiviAuto;
    new bool:fehler;
    new Parkplatz;
    new belegt[sizeof RandomCarPositions];
    printf("Anzahl Autos: %d",rnd);
    for(new i = 0;i < rnd; i++)
    {
    do{
    ZiviAuto = random(sizeof ZiviCars);//Zufällige Carid
    Parkplatz = random(sizeof RandomCarPositions); //Zufälliger Parkplatz
    printf("Schleifen durchlauf %d",i);
    fehler = false;
    printf("Start Sekundärschleife");
    for(new y = 0; y < i;y++)//Alle schon erstellten autos
    {
    printf("Prüfzahl %d",y);
    if(Parkplatz == belegt[y])//ist ein Parkplatz schon belegt?
    {
    fehler = true;//dann nochmal von do{
    printf("fehler: %d %d",Parkplatz, belegt[y]);
    break;
    }
    }
    printf("SekundärSchleife Fertig %d",fehler);
    }while(fehler);//laut debug funktioniert das
    printf("debug"); //´diser print wird unten nicht aufgelistet den print hab ich später eingefügt, dieser wird allerdings IMMER angezeigt
    //ab hier crasht es MANCHMAL ich kann aber auch nicht erkennen,
    //Dass ich auf ein undefiniertes Arryelement zugreif
    printf("%d %f %f %f %f",ZiviCars[ZiviAuto],RandomCarPositions[Parkplatz][car_x],RandomCarPositions[Parkplatz][car_y],RandomCarPositions[Parkplatz][car_z],RandomCarPositions[rnd2][car_a]);//1030
    CreateVehicle(ZiviCars[ZiviAuto],RandomCarPositions[Parkplatz][car_x],RandomCarPositions[Parkplatz][car_y],RandomCarPositions[Parkplatz][car_z],RandomCarPositions[rnd2][car_a] + random(2) * 180,random(128),random(128),-1);
    printf("Auto %d Erstellt",i);
    belegt[i] = Parkplatz;//der belegte parkplatz kann nicht wieder verwendet werden
    }
    printf("PrimärSchleife Fertig!");
    }


    Der Compiler Printet Folgendes


    Start
    [16:59:46] Anzahl Autos: 0
    [16:59:46] PrimärSchleife Fertig!
    [16:59:57]
    Soweit stimmt das wird ja keins erstellt


    ABER es wird auch folgendes geprintet


    [17:01:19]Start
    [17:01:19] Anzahl Autos: 4
    [17:01:19] Schleifen durchlauf 0
    [17:01:19] Start Sekundärschleife
    [17:01:19] SekundärSchleife Fertig 0
    Hier crasht die Funktion oft nicht immer aber immer öfter


    //EDIT:
    In Ganz wenigen fällen funktioniert alles dann sehen die Prints so aus:


    [17:05:31]Start
    [17:05:31] Anzahl Autos: 3
    [17:05:31] Schleifen durchlauf 0
    [17:05:31] Start Sekundärschleife
    [17:05:31] SekundärSchleife Fertig 0
    [17:05:31] 400 2792.743164 -1875.301513 9.555800 179.667602
    [17:05:31] Auto 0 Erstellt
    [17:05:31] Schleifen durchlauf 1
    [17:05:31] Start Sekundärschleife
    [17:05:31] Prüfzahl 0
    [17:05:31] SekundärSchleife Fertig 0
    [17:05:31] 401 2782.895751 -1875.850585 9.516599 179.667602
    [17:05:31] Auto 1 Erstellt
    [17:05:31] Schleifen durchlauf 2
    [17:05:31] Start Sekundärschleife
    [17:05:31] Prüfzahl 0
    [17:05:31] Prüfzahl 1
    [17:05:31] SekundärSchleife Fertig 0
    [17:05:31] 405 2797.901611 -1876.006103 9.575400 179.667602
    [17:05:31] Auto 2 Erstellt
    [17:05:31] PrimärSchleife Fertig!


    //EDIT: Weiterer Debug eingefügt und fehler eingeschränkt
    //EDIT: Überschrift verbessert
    //EDIT: Zeile Markiert

    5 Mal editiert, zuletzt von carlos1710 ()

  • Nun im Prinzip wars mir klar das eine Arry ungültig ist, dies verrät mir crashdetect: (danke für die empfehlung einfacher als gedacht)


    Die zeile 1030 Werd ich im oberen Code markieren da für mich immernoch nicht ersicht lich ist welche arry wiso zu groß ist.
    Viellciht dient es der Problembehandlung wenn cih die Arrys poste hier:

    enum car_positions
    {
    Float:car_x,
    Float:car_y,
    Float:car_z,
    Float:car_a
    }


    new RandomCarPositions[] [car_positions] = {//5 testparkplätze die zur auswahl stehen
    {2802.9133,-1876.1327,9.5953,179.6676},
    {2797.9016,-1876.0061,9.5754,180.3924},
    {2792.7432,-1875.3015,9.5558,178.2313},
    {2788.1750,-1875.9563,9.5380,179.2994},
    {2782.8958,-1875.8506,9.5166,179.8098}
    };


    new ZiviCars[] = {400,401,402,404,405}; //5 testautos die zur auswahl stehen


    Fehler Gefunden !!!
    printf("%d %f %f %f %f",ZiviCars[ZiviAuto],RandomCarPositions[Parkplatz][car_x],RandomCarPositions[Parkplatz][car_y],RandomCarPositions[Parkplatz][car_z],RandomCarPositions[rnd2][car_a]);//1030
    für die dies interessiert schaut euch pos_a an dadurch das oben waffen gespant werden ist der arryindey auf rnd2 was (was eine waffenposition ist)