help

Započeo Quay_Alvarez, Septembar 17, 2024, 00:40:44 PRE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

Problem(error/warning): Imam problem sa offmultiacc cmd izbacuje mi ovu gresku
Deo skripte: [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
[debug]  Stack pointer (STK) is 0x7EB6BC4, heap pointer (HEA) is 0x7EB71A4
[debug] AMX backtrace:
[debug] #0 00000000 in public ucitajAliasForPlayerOff ()

Kod:

private ucitajAliasForPlayerOff(playerid, name[]) {
new rows;
cache_get_row_count(rows);

    if(!rows) return SendErrorMessage(playerid, "Trenutno nema Multiacc od ovog igraca!");
    else
    {
    if(rows > 50) return SendErrorMessage(playerid, "Odabrani igrac ima vise nego 50 ip adresa.");
    new str_ime[1050];
    new imena[50][MAX_PLAYER_NAME];
    for(new i = 0; i < rows; i++) {
        cache_get_value_name( i, "ip", imena[i], MAX_PLAYER_NAME );
        format(str_ime, sizeof(str_ime), "%s OR `ip` = '%s'", str_ime, imena[i]);
        }

        new query[1050],rowss;
    mysql_format( dbSQL, query, sizeof(query), "SELECT * FROM `"TABLE_ALIAS"` WHERE `ime_igraca` = '%e'%s", name, str_ime );
    new Cache:cache_alias = mysql_query( dbSQL, query );
    cache_get_row_count(rowss);
    if(rowss)
    {
    if(rowss > 35) return SendErrorMessage(playerid, "Odabrani igrac ima vise nego 35 acc-a.");
    new str[1000], str_konacno[750];
    new imenaa[35][MAX_PLAYER_NAME];
    for(new i = 0; i < rowss; i++)
        {
        cache_get_value_name( i, "ime_igraca", imenaa[i], MAX_PLAYER_NAME );
        }
        new count_name[35], id_name[35];
        for(new i = 0; i < rowss; i++) {
        id_name[i] = 0;
        for(new j = 0; j < rowss; j++) {
        if(!strcmp(imenaa[i],imenaa[j],true)) {
        count_name[i]++;
        }
        }
        if(count_name[i] == 1) {
        format(str_konacno, sizeof(str_konacno), "%s%s\n", str_konacno, imenaa[i]);
        }
        }
        for(new i = 0; i < rowss; i++) {
        if(count_name[i] >= 2) {
        for(new j = 0; j < rowss; j++) {
        if(!strcmp(imenaa[i],imenaa[j],true)) {
        if(id_name[i] == 0) format(str_konacno, sizeof(str_konacno), "%s%s\n", str_konacno, imenaa[i]);
        id_name[i] = 1; id_name[j] = 1;
        }
        }
        }
        }
        format(str, sizeof(str), ""col_white"Drugi korisnicki racuni za ime {FFA200}%s "col_white"su:\n%s", name, str_konacno );
SPD(playerid, DIALOG_OSTALO, DIALOG_STYLE_MSGBOX, ""col_white"PROVERA {FFA200}MULTI RACUNA", str, "Zatvori", "");
    }
    cache_delete(cache_alias);

    }
    return true;
}

Prevelike stringove koristiš, smanji ih.
Smanji broj redova u petljama..
Zaustavi petlju kada pronadje razultat.
To bi trebalo riješiti tvoj problem

Citat: K ROSE poslato Septembar 17, 2024, 01:42:57 PRE PODNEPrevelike stringove koristiš, smanji ih.
Smanji broj redova u petljama..
Zaustavi petlju kada pronadje razultat.
To bi trebalo riješiti tvoj problem
Problem mi pravi ovaj string
new imena[50][MAX_PLAYER_NAME];
prvo je array drugo je duzina

Glupo je ovo napravljeno..
Nema logike da ide kroz loop od rows-a, šta ako u bazi ima 1000 redova a ti si stavio velicinu stringa na 50 redova...
Ne može ovo ovako, ponovo sve pravi