help

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

prethodna tema - sledeća tema

0 članova i 1 gost 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