Array index out of bounds

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

  • Array index out of bounds

    Hallo,
    ich habe gerade einige Fehler, die ich beim besten Willen nicht wegbekomme:

    Quellcode

    1. error 032: array index out of bounds (variable "haus") // 13x - Überall wo haus[i][...] verwendet wird


    Hier der relevante Teil des Codes. Hauptsächlich sind die Fehler im Callback LoadHaus.
    [pwn]#define MAX_HAUS 350

    enum hInfo {
    Float:X,
    Float:Y,
    Float:Z,
    Preis,
    Gebiet[5],
    Besitzer[24],
    KeyID,
    pickup,
    bool:loaded = false
    };

    new haus[MAX_HAUS][hInfo];

    public LoadHaus()
    {
    new text[128];
    for(new i=0; i<MAX_HAUS; i++)
    {
    if(haus[loaded] == false)
    {
    format(mQuery, 128, "SELECT * FROM haus WHERE ID = %i", i);
    mysql_query(mQuery);
    mysql_store_result();
    if(mysql_num_rows())
    {
    mysql_free_result();
    haus[i][X] = mysql_GetFloat("haus", "X", "ID", i);
    haus[i][Y] = mysql_GetFloat("haus", "Y", "ID", i); // error 032
    haus[i][Z] = mysql_GetFloat("haus", "Z", "ID", i); // error 032
    haus[i][Besitzer] = mysql_GetString("haus", "Besitzer", "ID", i); // error 032
    haus[i][Gebiet] = mysql_GetString("haus", "Gebiet", "ID", i); // error 032
    haus[i][KeyID] = mysql_GetInt("haus", "KeyID", "ID", i); // error 032
    haus[i][Preis] = mysql_GetInt("haus", "Preis", "ID", i); // error 032
    haus[i][loaded] = true;
    if(strlen(haus[i][Besitzer]) > 2) // error 032
    { // Bewohnt
    format(text, 128, "- Besitzer: %s -\n- Gebiet: %s -", haus[i][Besitzer], haus[i][Gebiet]); // error 032
    haus[i][pickup] = CreatePickup(1272, 1, haus[i][X], haus[i][Y], haus[i][Z], -1); // error 032
    Create3DTextLabel(text, cAQUA, haus[i][X], haus[i][Y], haus[i][Z]+1, 5, 0, 0); // error 032
    }
    else
    { // Verkäuflich
    format(text, 128, "- Verkäuflich -\n- Preis: $%i -\n- Gebiet: %s -", haus[i][Preis], haus[i][Gebiet]); // error 032
    haus[i][pickup] = CreatePickup(1273, 1, haus[i][X], haus[i][Y], haus[i][Z], -1); // error 032
    Create3DTextLabel(text, cDONE, haus[i][X], haus[i][Y], haus[i][Z]+1, 5, 0, 0); // error 032
    }
    }
    }
    mysql_free_result();
    }
    return 1;
    }[/pwn]
    Ich hoffe mir kann jemand helfen.

    Mit freundl. Grüßen
    Padarom

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Padarom ()

  • Ich kenne das.
    Meine Lösung ist nicht die einfachste, dennoch funktioniert sie:
    [pwn]new str1[5],
    schleife;
    while(schleife < MAX_HAUS) {
    format(str1, sizeof(str1), "%d", schleife);
    haus[X] = mysql_GetFloat("haus", "X", "ID", str1);
    haus[i][Y] = mysql_GetFloat("haus", "Y", "ID", str1);
    haus[i][Z] = mysql_GetFloat("haus", "Z", "ID", str1);
    //...
    }[/pwn]

    Dann bei "..." eben noch den Rest einsetzen und anpassen - klappt eigtl. ohne Probleme! ;-)
  • Padarom schrieb:

    Hallo,
    ich habe gerade einige Fehler, die ich beim besten Willen nicht wegbekomme:

    Quellcode

    1. error 032: array index out of bounds (variable "haus") // 13x - Überall wo haus[i][...] verwendet wird


    Hier der relevante Teil des Codes. Hauptsächlich sind die Fehler im Callback LoadHaus.
    [pwn]#define MAX_HAUS 350

    enum hInfo {
    Float:X,
    Float:Y,
    Float:Z,
    Preis,
    Gebiet[5],
    Besitzer[24],
    KeyID,
    pickup,
    bool:loaded = false
    };

    new haus[MAX_HAUS][hInfo];

    public LoadHaus()
    {
    new text[128];
    for(new i=0; i<MAX_HAUS; i++)
    {
    if(haus[loaded] == false)
    {
    format(mQuery, 128, "SELECT * FROM haus WHERE ID = %i", i);
    mysql_query(mQuery);
    mysql_store_result();
    if(mysql_num_rows())
    {
    mysql_free_result();
    if(i > MAX_HAUS) continue;
    haus[i][X] = mysql_GetFloat("haus", "X", "ID", i);
    haus[i][Y] = mysql_GetFloat("haus", "Y", "ID", i); // error 032
    haus[i][Z] = mysql_GetFloat("haus", "Z", "ID", i); // error 032
    haus[i][Besitzer] = mysql_GetString("haus", "Besitzer", "ID", i); // error 032
    haus[i][Gebiet] = mysql_GetString("haus", "Gebiet", "ID", i); // error 032
    haus[i][KeyID] = mysql_GetInt("haus", "KeyID", "ID", i); // error 032
    haus[i][Preis] = mysql_GetInt("haus", "Preis", "ID", i); // error 032
    haus[i][loaded] = true;
    if(strlen(haus[i][Besitzer]) > 2) // error 032
    { // Bewohnt
    format(text, 128, "- Besitzer: %s -\n- Gebiet: %s -", haus[i][Besitzer], haus[i][Gebiet]); // error 032
    haus[i][pickup] = CreatePickup(1272, 1, haus[i][X], haus[i][Y], haus[i][Z], -1); // error 032
    Create3DTextLabel(text, cAQUA, haus[i][X], haus[i][Y], haus[i][Z]+1, 5, 0, 0); // error 032
    }
    else
    { // Verkäuflich
    format(text, 128, "- Verkäuflich -\n- Preis: $%i -\n- Gebiet: %s -", haus[i][Preis], haus[i][Gebiet]); // error 032
    haus[i][pickup] = CreatePickup(1273, 1, haus[i][X], haus[i][Y], haus[i][Z], -1); // error 032
    Create3DTextLabel(text, cDONE, haus[i][X], haus[i][Y], haus[i][Z]+1, 5, 0, 0); // error 032
    }
    }
    }
    mysql_free_result();
    }
    return 1;
    }[/pwn]
    Ich hoffe mir kann jemand helfen.

    Mit freundl. Grüßen
    Padarom



    so?
  • [pwn]#define MAX_HAUS 350

    enum hInfo {
    Float:X,
    Float:Y,
    Float:Z,
    Preis,
    Gebiet[5],
    Besitzer[24],
    KeyID,
    pickup,
    bool:loaded = false
    };

    new haus[MAX_HAUS][hInfo];

    stock LoadHaus()
    {
    new str[10];
    for(new var; var < MAX_HAUS; var++) {
    format(str, sizeof(str), "%d", var);
    haus[var][X] = mysql_GetFloat("haus", "X", "ID", str);
    haus[var][Y] = mysql_GetFloat("haus", "Y", "ID", str); // error 032
    haus[var][Z] = mysql_GetFloat("haus", "Z", "ID", str); // error 032
    haus[var][Besitzer] = mysql_GetString("haus", "Besitzer", "ID", str); // error 032
    haus[var][Gebiet] = mysql_GetString("haus", "Gebiet", "ID", str); // error 032
    haus[var][KeyID] = mysql_GetInt("haus", "KeyID", "ID", str); // error 032
    haus[var][Preis] = mysql_GetInt("haus", "Preis", "ID", str); // error 032
    haus[var][loaded] = true;
    if(strlen(haus[Besitzer]) > 2) // error 032
    { // Bewohnt
    format(text, 128, "- Besitzer: %s -\n- Gebiet: %s -", haus[i][Besitzer], haus[i][Gebiet]); // error 032
    haus[i][pickup] = CreatePickup(1272, 1, haus[i][X], haus[i][Y], haus[i][Z], -1); // error 032
    Create3DTextLabel(text, cAQUA, haus[i][X], haus[i][Y], haus[i][Z]+1, 5, 0, 0); // error 032
    }
    else
    { // Verkäuflich
    format(text, 128, "- Verkäuflich -\n- Preis: $%i -\n- Gebiet: %s -", haus[i][Preis], haus[i][Gebiet]); // error 032
    haus[i][pickup] = CreatePickup(1273, 1, haus[i][X], haus[i][Y], haus[i][Z], -1); // error 032
    Create3DTextLabel(text, cDONE, haus[i][X], haus[i][Y], haus[i][Z]+1, 5, 0, 0); // error 032
    }
    }
    return 1;
    }[/pwn]
  • Danke für die Zeit die ihr aufbringt, aber es geht leider immernoch nicht :(
    Ich verzweifel langsam. Ich habe es mal wie folgt getestet:
    [pwn]new Float:hX[MAX_HAUS], Float:hY[MAX_HAUS], Float:hZ[MAX_HAUS];[/pwn]
    So klappt es, allerdings ist das ziemlich unordentlich bei ca. 10 verschiedenen Variablen und auch später mit dem Abfragen.
  • Genau, die R5 aber, da die R7 irgendwie nicht läuft (Komische Errors z.B. dass mysql_query nicht definiert wäre).
    Ich wüsste aber auch nicht wo großartige Fehler in meinem Script sein sollten. Ohne den LoadHaus-Part gibt es keine Fehler, und ansonsten hat das Script auch nur 450 Zeilen bisher.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Padarom ()

  • Erstaunlicherweise garnichts. Das geht erst ab dem zweiten los. Kann es vielleicht sein, dass etwas am mysql_GetFloat nicht stimmt, sodass ab dem zweiten Mal ein Fehler stattfindet?
    [pwn]stock Float:mySQL_GetFloat(table[], row[], whereIs[], what[])
    {
    new query[128], Float:Float;
    mysql_real_escape_string(whereIs, whereIs);
    mysql_real_escape_string(what, what);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", row, table, whereIs, what);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(Float);
    mysql_free_result();
    return Float;
    }[/pwn]
  • Das ist der von Maddin's Tutorial :D
    Ich habe eben testweise woanders im Script Werte in die Variable zugewiesen. Ebenfalls Fehler:
    [pwn] haus[3][X] = 0.57636;
    haus[3][Y] = 0.57636; // Out of bounds
    haus[3][Z] = 0.57636; // Out of bounds[/pwn]
    Vielleicht stimmt also etwas mit der Enum(eration) nicht.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Padarom ()

  • Wooaahhh... Ich habs!
    Dadurch dass ich den Wert der bool (loaded) zugewiesen habe, hat er erwartet, dass ich jedem anderen auch schon einen Standardwert zuweise. Da Bool's standardweise false sind, ist die Zuweisung so oder so schwachsinn. Diese also rausgemacht und bumm... Es klappt!
    Dennoch danke!

    edit: Ich meine, dass ich so einen Fehler schonmal hatte, als das = false alles durcheinandergeschmissen hatte, konnte mich daran aber eben nicht mehr erinnern.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Padarom ()