Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Out of memory

Страниц (3): [1] 2 3 »
 

1. Kensi - 24 Октября, 2018 - 03:27:10 - перейти к сообщению
Пишу бота, во время работы которого появляется ошибка out of memory -
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Затем выполнение скрипта прекращается, а завершить работу через crtl shift z не получается. закрываю его с панели задач. После чего появляется эта ошибка -
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]. Все библиотеки c++ стоят. оперативы 8 гигов. win 10.
В чем может быть проблема? Если надо кину код функции, во время работы которой возникает ошибка. Или дело в чем то другом?
2. Zireael - 24 Октября, 2018 - 03:32:22 - перейти к сообщению
 Цитата:
Если надо кину код функции

Надо.
3. Kensi - 24 Октября, 2018 - 03:40:15 - перейти к сообщению
 Zireael пишет:
 Цитата:
Если надо кину код функции

Надо.


CODE:
function фазаБоя2(){

m6: pause(1000);
readtext(NUM, #phaseNum, 23, 3, -1, -1, -1, -1, -1, 0, -1, 1321, 97, 1344, 132, -1);

if (phaseNum == '2'){

pause(200);
mouse(LEFT,106, 254);
pause(200);

int i = 0;

m10: readtext(MARK, #textMark, 20, 3, -1, -1, -1, -1, -1, 0, -1, winArrayTopX[i], winArrayTopY[i], winArrayBottomX[i], winArrayBottomY[i], -1);
if (textMark == '!')){
goto m13;
}else{
readtext (RU, #defeatWord, 40, 3, -1, -1, -1, #Color_Text_Defeat[0], #Color_Fon_Defeat[0], 5, -1, defeatArrayTopX[i], defeatArrayTopY[i], defeatArrayBottomX[i], defeatArrayBottomY[i], -1);
if(defeatWord == 'поражение'){
goto m13;
} else {
readtext (EN, #myName, 36, 3, -1, -1, -1, -1, -1, 0, 99, flagArrayTopX[i], flagArrayTopY[i], flagArrayBottomX[i], flagArrayBottomY[i], -1);
if(myName == 'Panteon'){
goto m8;
} else {
mouse(LEFT, enemiesArrayX[i]+rand(-50, 50), enemiesArrayY[i]+rand(-20, 20));
pause(1500);
readtext(NUM, #enemyPowerSTR, 40, 3, -1, -1, -1, #color_text_KIB_9[0], #color_fon_KIB_9[0], 5, -1, 1032, 451, 1261, 493, -1);
enemyPowerNUM = formatsn(del_space(enemyPowerSTR));

if (enemyPowerNUM + 30000 < записьМоейМощи()){
pause(200);
mouse(LEFT, 1345+rand(0, 50), 837+rand(0, 15));
pause(10000);

m7: readtext(RU, #homeBtn, 40, 3, -1, -1, -1, #color_text_KIB_13[0], #color_fon_KIB_13[0], 5, -1, 893, 893, 1000, 937, -1);
if(homeBtn == 'домо'){
mouse(LEFT, 957+rand(-10, 10), 912+rand(-10, 10));
} else {
pause(1000);
goto m7;
}
} else {
m13:;
i++;
mouse(LEFT, 106, 254);
goto m10;
}
}
}
}


m8: int j = 14;
m9: readtext(MARK, #textMark, 20, 3, -1, -1, -1, -1, -1, 0, -1, winArrayTopX[j], winArrayTopY[j], winArrayBottomX[j], winArrayBottomY[j], -1);
if (textMark == '!'){
goto m11;
}else{
readtext (RU, #defeatWord, 40, 3, -1, -1, -1, #Color_Text_Defeat[0], #Color_Fon_Defeat[0], 5, -1, defeatArrayTopX[j], defeatArrayTopY[j], defeatArrayBottomX[j], defeatArrayBottomY[j], -1);
if(defeatWord == 'поражение'){
goto m11;
} else {
readtext (EN, #myName, 36, 3, -1, -1, -1, -1, -1, 0, 99, flagArrayTopX[j], flagArrayTopY[j], flagArrayBottomX[j], flagArrayBottomY[j], -1);
if(myName == 'Panteon'){
goto m11;
} else {
mouse(LEFT, enemiesArrayX[i]+rand(-50, 50), enemiesArrayY[i]+rand(-20, 20));
pause(1500);

readtext(NUM, #enemyPowerSTR, 40, 3, -1, -1, -1, #color_text_KIB_9[0], #color_fon_KIB_9[0], 5, -1, 1032, 451, 1261, 493, -1);
enemyPowerNUM = formatsn(del_space(enemyPowerSTR));

if (enemyPowerNUM + 30000 < записьМоейМощи()){
pause(200);
mouse(LEFT, 1345+rand(0, 50), 837+rand(0, 15));
pause(10000);

m12: readtext(RU, #homeBtn, 40, 3, -1, -1, -1, #color_text_KIB_13[0], #color_fon_KIB_13[0], 5, -1, 893, 893, 1000, 937, -1);
if(homeBtn == 'домо'){
mouse(LEFT, 957+rand(-10, 10), 912+rand(-10, 10));
} else{
pause(1000);
goto m12;
}
} else {
m11:;
j--;
mouse(LEFT, 106, 254);
goto m9;
}
}
}
}

} else goto m6;


}


функции, которые используются в процессе работы

CODE:
function записьМоейМощи(){

readtext(NUM, #myPowerSTR, 40, 3, -1, -1, -1, #color_text_KIB_10[0], #color_fon_KIB_10[0], 5, -1, 552, 451, 825, 493, -1);
myPowerNUM = formatsn(del_space(myPowerSTR));
return myPowerNUM;

}


CODE:
function del_space(string t){
int aw=size(t);
char a[50];
strcpy(#a[0], t);
t="";
for (int n=0; n<aw; n++){
if (a[n]!=' ')t=t+a[n];
}
return t;
}
4. Kibor - 24 Октября, 2018 - 03:57:09 - перейти к сообщению
 Цитата:
defeatWord == 'поражение'


CODE:
defeatWord == "поражение"
(для просмотра ссылки Вам необходимо авторизоваться)
5. Kensi - 24 Октября, 2018 - 04:09:09 - перейти к сообщению
[quote=Kibor]
 Цитата:
defeatWord == 'поражение'


CODE:
defeatWord == "поражение"
(для просмотра ссылки Вам необходимо авторизоваться) /quote]

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

Заменил, ошибка остается.
(Добавление)
[quote=Kensi]
 Kibor пишет:
 Цитата:
defeatWord == 'поражение'


CODE:
defeatWord == "поражение"
(для просмотра ссылки Вам необходимо авторизоваться) /quote]

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

Заменил, ошибка остается.


также я правильно понял, что
CODE:
phaseNum == '2'

в таких сеста надо сделать
CODE:
phaseNum == \'2\'

?
6. Zireael - 24 Октября, 2018 - 04:55:51 - перейти к сообщению
Если сравнивается 1 символ, то можно в одинарных и двойных кавычках: '2' или "2"
Если несколько символов, то в двойных "123".

Выводите действия в textout или пишите в файл, тогда будет понятно в каком месте ошибка.
Строить логику на goto это не очень правильно. Трудно отследить что за чем выполнятется.
 Цитата:
winArrayTopX[i]

Переменная i++ увеличивается, при этом нигде нет проверки что не вышли за пределы массива.
7. Kensi - 24 Октября, 2018 - 05:08:47 - перейти к сообщению
 Zireael пишет:
Если сравнивается 1 символ, то можно в одинарных и двойных кавычках: '2' или "2"
Если несколько символов, то в двойных "123".

Выводите действия в textout или пишите в файл, тогда будет понятно в каком месте ошибка.
Строить логику на goto это не очень правильно. Трудно отследить что за чем выполнятется.
 Цитата:
winArrayTopX[i]

Переменная i++ увеличивается, при этом нигде нет проверки что не вышли за пределы массива.

спасибо, тоже решил так сделать, но я выводил messagebox. нашел проблемное место, щас буду разбираться с этим
8. Zireael - 24 Октября, 2018 - 18:11:47 - перейти к сообщению
Можно заменить это:
CODE:
function del_space(string t){
int aw=size(t);
char a[50];
strcpy(#a[0], t);
t="";
for (int n=0; n<aw; n++){
if (a[n]!=' ')t=t+a[n];
}
return t;
}

На это:
CODE:
function del_space(string t)
{
regexreplace(-1, #t, t, " ", "");
return t;
}


Для примера:
CODE:
string s="1 2 3";
messagebox(s); // с пробелами
s=del_space(s);
messagebox(s); // без пробелов

function del_space(string t)
{
regexreplace(-1, #t, t, " ", "");
return t;
}
9. Kibor - 24 Октября, 2018 - 18:22:50 - перейти к сообщению
out of memory в основном появляется если не правильно указана область в которой что то ищем или делаем.

Пример
CODE:
int Image_0[5][5];
loadimage (#Image_0[0][0], "C:\Image_0.bmp");
int PosX_0[512];int PosY_0[512];

findimage(-1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 100, 50, 90, 200, -1);


100, 50, 90, 200 неправильная зона.
По x координата конца зоны меньше начала.
Скрипт выдаст out of memory
Проверяйте эти все
defeatArrayTopX[j], defeatArrayTopY[j], defeatArrayBottomX[j], defeatArrayBottomY[j]
и тд.
Что в них и не выходит ли j за массив не известно.
10. Almighty - 25 Октября, 2018 - 02:59:02 - перейти к сообщению
Добрый день.
Тоже появляется данная ошибка после пару часов работы скрипта.
Появиться она может, когда "ей удобно", так как в 99% нажимает на изображения, а иногда на нем выдает данную ошибку. Весь код делал через визуальный редактор, только 2 блока есть с кодом, который я вписывал.
КОД
Может ли быть проблема именно с выделением памяти? Ее не хваткой, так как через часа,два работы бота оперативы выделяется для работы Кибор превышает 1.5гб ?
Подскажите, как можно автоматически выделять и очищать оперативную память ддя работы собраного exe ?

Powered by ExBB FM 1.0 Final