Пишу бота, во время работы которого появляется ошибка out of memory -
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Затем выполнение скрипта прекращается, а завершить работу через crtl shift z не получается. закрываю его с панели задач. После чего появляется эта ошибка -
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]. Все библиотеки c++ стоят. оперативы 8 гигов. win 10.
В чем может быть проблема? Если надо кину код функции, во время работы которой возникает ошибка. Или дело в чем то другом?
1. Kensi - 24 Октября, 2018 - 03:27: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;
}
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;
}
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;
}
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]
нужно заменить одинарные на двойные во всем коде? потому что у меня везде до этого стоят одинарные в подобных условиях, а ошибка возникает тут.
Заменил, ошибка остается.
(Добавление)
[quote=Kensi]
нужно заменить одинарные на двойные во всем коде? потому что у меня везде до этого стоят одинарные в подобных условиях, а ошибка возникает тут.
Заменил, ошибка остается.
также я правильно понял, что
в таких сеста надо сделать
?
Цитата:
defeatWord == 'поражение'
CODE:
(для просмотра ссылки Вам необходимо авторизоваться) /quote]defeatWord == "поражение"
нужно заменить одинарные на двойные во всем коде? потому что у меня везде до этого стоят одинарные в подобных условиях, а ошибка возникает тут.
Заменил, ошибка остается.
(Добавление)
[quote=Kensi]
Kibor пишет:
Цитата:
defeatWord == 'поражение'
CODE:
(для просмотра ссылки Вам необходимо авторизоваться) /quote]defeatWord == "поражение"
нужно заменить одинарные на двойные во всем коде? потому что у меня везде до этого стоят одинарные в подобных условиях, а ошибка возникает тут.
Заменил, ошибка остается.
также я правильно понял, что
CODE:
phaseNum == '2'
в таких сеста надо сделать
CODE:
phaseNum == \'2\'
?
6. Zireael - 24 Октября, 2018 - 04:55:51 - перейти к сообщению
Если сравнивается 1 символ, то можно в одинарных и двойных кавычках: '2' или "2"
Если несколько символов, то в двойных "123".
Выводите действия в textout или пишите в файл, тогда будет понятно в каком месте ошибка.
Строить логику на goto это не очень правильно. Трудно отследить что за чем выполнятется.
Переменная i++ увеличивается, при этом нигде нет проверки что не вышли за пределы массива.
Если несколько символов, то в двойных "123".
Выводите действия в textout или пишите в файл, тогда будет понятно в каком месте ошибка.
Строить логику на goto это не очень правильно. Трудно отследить что за чем выполнятется.
Цитата:
winArrayTopX[i]
Переменная i++ увеличивается, при этом нигде нет проверки что не вышли за пределы массива.
7. Kensi - 24 Октября, 2018 - 05:08:47 - перейти к сообщению
Zireael пишет:
Если сравнивается 1 символ, то можно в одинарных и двойных кавычках: '2' или "2"
Если несколько символов, то в двойных "123".
Выводите действия в textout или пишите в файл, тогда будет понятно в каком месте ошибка.
Строить логику на goto это не очень правильно. Трудно отследить что за чем выполнятется.
Переменная i++ увеличивается, при этом нигде нет проверки что не вышли за пределы массива.
Если несколько символов, то в двойных "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;
}
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;
}
{
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;
}
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 в основном появляется если не правильно указана область в которой что то ищем или делаем.
Пример
100, 50, 90, 200 неправильная зона.
По x координата конца зоны меньше начала.
Скрипт выдаст out of memory
Проверяйте эти все
defeatArrayTopX[j], defeatArrayTopY[j], defeatArrayBottomX[j], defeatArrayBottomY[j]
и тд.
Что в них и не выходит ли j за массив не известно.
Пример
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);
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 ?
Тоже появляется данная ошибка после пару часов работы скрипта.
Появиться она может, когда "ей удобно", так как в 99% нажимает на изображения, а иногда на нем выдает данную ошибку. Весь код делал через визуальный редактор, только 2 блока есть с кодом, который я вписывал.
КОД
Может ли быть проблема именно с выделением памяти? Ее не хваткой, так как через часа,два работы бота оперативы выделяется для работы Кибор превышает 1.5гб ?
Подскажите, как можно автоматически выделять и очищать оперативную память ддя работы собраного exe ?