PDA

Просмотр полной версии : [Вопрос] Float warning



vovandolg
18.10.2016, 15:26
Сервер падает



[14:15:31] [debug] Server crashed while executing zm.amx
[14:15:31] [debug] AMX backtrace:
[14:15:31] [debug] #0 000000ed in ?? (... <57 arguments>) at D:\Program\САМП\SAMP 0.3.7 Server\gamemodes\include\float.inc:151
[14:15:31] [debug] #1 000000ed in public cmd_a () at D:\Program\САМП\SAMP 0.3.7 Server\gamemodes\include\float.inc:151

//--------------------------------------------------------------
//inc
stock bool:operator>(oper1, Float:oper2)
return floatcmp(float(oper1), oper2) > 0;

stock bool:operator>=(Float:oper1, Float:oper2)
return floatcmp(oper1, oper2) >= 0; //151 строка

stock bool:operator>=(Float:oper1, oper2)
return floatcmp(oper1, float(oper2)) >= 0;

//использую dc_cmd, вот сама команда
#define COL_LIGHTBLUE "{00C0FF}"
#define @new%0\32%1[%2]%3; goto _noinit_%1; new %1[%2]%3; _noinit_%1:

CMD:a(playerid,params[])
{
@new strr[145];
strr[0] = EOS;
if(pInfo[playerid][pAdm] < 1) return -1;
if(isnull(params))
return SCM(playerid, -1, !""chat" /a [message]");
format(strr, 190, ""COL_LIGHTBLUE"[Admin Chat] %s[%d]: %s",pInfo[playerid][pUsername], playerid, params);
SAM(-1, strr);
strr[0] = EOS;
return 1;
}

ziggi
18.10.2016, 16:46
Без пропуска инициализации проверял?

vovandolg
18.10.2016, 19:11
Без пропуска инициализации проверял?

Я толком то ещё не понял от чего ошибка, если пользоваться этой командой то нормально всё,
а тут показало такое, то есть кроме пропуска и-и больше не чего не может быть?

DeimoS
18.10.2016, 20:23
Во-первых, ты легко словишь краш из-за format.

@new strr[145];
format(strr, 190,
sizeof нынче не модно использовать? Вполне возможно, что проблема в этом.

Во-вторых, ты пробовал убрать пропуск инициализации-то?

SliM
19.10.2016, 14:26
а зачем для локального массива, который вот вот покинет стэк, вот это strr[0] = EOS;?

vovandolg
19.10.2016, 20:45
а зачем для локального массива, который вот вот покинет стэк, вот это strr[0] = EOS;?

Типо ручная инициализация или очистка так сказать)
потому что если этого не сделать там в ней может что то быть, но это только в одном случае:


@new vipstr[350];
vipstr[0] = EOS;
foreach(new i: Player)
{
if(pInfo[i][pVipLVL] > 0)
format(vipstr, 350, "%s %s\n", vipstr, pInfo[i][pUsername]);
}

_________________
По теме отписываюсь, свой косяк с подсчетом устранил и поискал другие,
ещё 1 был с неправильным подсчетом, пропуск инициализации вроде как не причем,
сервер пока не падал от этого...