PDA

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



Rasta
06.09.2014, 15:01
У меня в каждом паблике/команде(DC_MD) создается локальный массив. (Для каждого массива подсчитываю ячейки)
Сегодня засунул в папку с pawno файл: "-d3" - появилось переполнение.
Если файл убрать, то переполнение не показывается.


Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

Header size: 3188 bytes
Code size: 57556 bytes
Data size: 241424 bytes
Stack/heap size: 16384 bytes; estimated max. usage=535 cells (2140 bytes)
Total requirements: 318552 bytes

С чем это может быть связано, может дадите совет по правильному использованию?




stock OnPlayerSave(pid)
{
if(!GetPVarInt(pid, "Login")) return Kick(pid);
new str[102 - 2 + 1 - 2 + 3 - 2 + 1 - 2 + 8 - 2 + 4 - 2 + MAX_PLAYER_NAME];
mysql_format(cHandle, str, sizeof(str), "UPDATE `Accounts` SET `Sex`='%d',`Skin`='%d',`Admin`='%d',`Money`='%d',`Level`='%d' WHERE `Nick`='%s'",
PInfo[pid][Sex],PInfo[pid][Skin],PInfo[pid][Admin],GetPlayerMoney(pid),PInfo[pid][Level]);
mysql_function_query(cHandle, str, false, "","");
return true;
}

DeimoS
06.09.2014, 16:53
Это не переполнение. "-d3" - это опция, которая включает режим отладки и он показывает кол-во памяти, которое тратится в том или ином случае.

Rasta
06.09.2014, 17:13
То есть, меры предпринимать не нужно?

nekaz
06.09.2014, 17:34
Нет)

DeimoS
06.09.2014, 17:58
Так-с... Давайте разберёмся. Вот у нас строка, отвечающая за стек.

Stack/heap size: 16384 bytes; estimated max. usage=535 cells (2140 bytes)
Вот указан размер памяти, что выделен под стек на данный момент

16384 bytes
А вот показан размер занимаемой памяти из того, что уже выделено

535 cells (2140 bytes)
У вас сейчас свободно 14244 байт памяти.

Archange
10.09.2014, 01:19
Сделай оптимизацию и это пропадет, допустим уменьшить размер текста т.е.

У нас в строчке блокировке аккаунта используется максимум 256 ячеек, но ты вписал 1024 чтобы на всякий случай предохраниться, а вдруг не хватит - этого нельзя делать, идет переполнение памяти

Запрещено:

string[1024];

Разрешено:

string[256];

Стринг можно использовать и меньше, но надо проверять где именно уменьшать стринг, в диалоговом окне может использоваться 700+ ячеек и ты уменьшишь до 256 то буквы/ символы не будут выводится, проверяй все ненужной и оптимизируй

DeimoS
10.09.2014, 06:17
Сделай оптимизацию и это пропадет, допустим уменьшить размер текста т.е.

У нас в строчке блокировке аккаунта используется максимум 256 ячеек, но ты вписал 1024 чтобы на всякий случай предохраниться, а вдруг не хватит - этого нельзя делать, идет переполнение памяти

Запрещено:

string[1024];

Разрешено:

string[256];

Стринг можно использовать и меньше, но надо проверять где именно уменьшать стринг, в диалоговом окне может использоваться 700+ ячеек и ты уменьшишь до 256 то буквы/ символы не будут выводится, проверяй все ненужной и оптимизируй

Фу-фу-фу. Под массивы нужно выделять не 1024 или 256 ячеек, а столько, сколько требуется для хранения данных! Ни больше, ни меньше.
Но тут нет переполнения памяти. Перепрочтите сообщения выше и всё поймёте.Проблема давно решена

underwoker
10.09.2014, 08:12
Сделай оптимизацию и это пропадет, допустим уменьшить размер текста т.е.

У нас в строчке блокировке аккаунта используется максимум 256 ячеек, но ты вписал 1024 чтобы на всякий случай предохраниться, а вдруг не хватит - этого нельзя делать, идет переполнение памяти

Запрещено:

string[1024];

Разрешено:

string[256];

Стринг можно использовать и меньше, но надо проверять где именно уменьшать стринг, в диалоговом окне может использоваться 700+ ячеек и ты уменьшишь до 256 то буквы/ символы не будут выводится, проверяй все ненужной и оптимизируй
лол :bad:

Rasta
11.09.2014, 18:09
Archange, я скинул вам пример, как я создаю массивы.

(Для каждого массива подсчитываю ячейки)

То, что вы написал - не годится.
Тема уже давно закрыта.

Salvacore
11.09.2014, 18:26
Теперь закрыта.