Servercrash durch MySQL (Adresse: 0x41dbc) - Woran liegt es?

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
  • Hi,


    ich habe soeben beim Testen meines Fraktionssystems folgenden Print in die server_log.txt bekommen, nachdem der Server gecrasht ist:

    SQL
    [14:07:30] Crash caused by mysql_free_result at address 0x41dbc in gamemodes/script.amx
    [14:07:30] For more details compile this script with debugging symbols enabled and start the server again


    Ich benutze MySQL R5 von BlueG.
    Ich benutze das Debugging (mysql_debug(1); ).
    In der mysql_log.txt habe ich nichts außer meine Querys gefunden^^


    Woher weiß ich nun, was die Adresse 0x41dbc ist?
    Warum crasht dies meinen Server?


    lg
    Deagle

  • Du müsstest irgendwo Compile-Flags auf "-d3" stellen können. (in deiner IDE)
    Verwende zur Sicherheit noch das crashdetect Plugin


    Habe es mal eingebaut in der IDE. Immer noch der gleiche Error in der Log.
    Ich konnte nun aber die genaue Ursache ausfindig machen:
    [pwn='5727']case DLG_FACTION_KTO2:
    {
    if(response) {
    if(!strlen(inputtext)) {
    ShowPlayerDialog(playerid,DLG_FACTION_KTO2,DIALOG_STYLE_INPUT,"Fraktionskasse - Einzahlen","Wie viel Geld möchtest du auf die Fraktionskasse einzahlen?","Einzahlen","Zurück");
    } else {
    if(strval(inputtext) > 0) {
    if(pInfo[playerid][pMoney] >= strval(inputtext)) {
    new str[128];
    format(str,sizeof str,"Du hast %s€ auf deine Fraktionskasse eingezahlt!",inspoints(strval(inputtext)));
    ShowPlayerDialog(playerid,DLG_FACTION_KTO3,DIALOG_STYLE_MSGBOX,"Fraktionskasse - Einzahlen",str,"Schliessen","");
    pInfo[playerid][pMoney] -= strval(inputtext);
    FrakInfo[pInfo[playerid][pFraktion]][fKasse] += strval(inputtext);
    KillFrak(pInfo[playerid][pFraktion]);
    format(str,sizeof str,"SELECT * FROM `Frak` WHERE `ID` = '%d'",pInfo[playerid][pFraktion]);
    mysql_query(str);
    format(str,sizeof str,"");
    mysql_store_result();
    while(mysql_fetch_row(str)) {
    LoadFrak(pInfo[playerid][pFraktion], str);
    }
    mysql_free_result();
    } else {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Du hast nocht so viel Geld in deiner Geldbörse!");
    }
    } else {
    ShowPlayerDialog(playerid,DLG_FACTION_KTO2,DIALOG_STYLE_INPUT,"Fraktionskasse - Einzahlen","Wie viel Geld möchtest du auf die Fraktionskasse einzahlen?","Einzahlen","Zurück");
    }
    }
    } else {
    ShowPlayerDialog(playerid,DLG_FACTION_KTO,DIALOG_STYLE_LIST,"Fraktionskasse","Geldstand anzeigen\nGeld einzahlen\nLöhne einstellen","Weiter","Zurück");
    }
    }[/pwn]
    Es ist das mysql_free_result(); auf Zeile 5748.
    Was ist daran falsch?


    /e:
    Jeffry:

  • Bist du dir sicher das 128 Zeichen zum speichern des results ausreichen ?


    Wenn der Platz nicht ausreicht, dann crasht der Server bei mysql_free_result ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski