Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 5.38 Операторы new и delete для динамичного выделения и очищения памяти

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

11. Dantes3000 - 18 Июля, 2018 - 16:33:34 - перейти к сообщению
Не догоняю в чем реальный смысл этих функций, если в киборе даже обычный флаг 0 или 1 нужно записывать в int, который рассчитан на число до двух миллиардов.
12. Kibor - 19 Июля, 2018 - 02:18:45 - перейти к сообщению
 Dantes3000 пишет:
Не догоняю в чем реальный смысл этих функций, если в киборе даже обычный флаг 0 или 1 нужно записывать в int, который рассчитан на число до двух миллиардов.

Флаг можно записать в char, если жалко лишних трех байтов.

Но какое отношение имеет размер памяти под одну переменную к размеру массива переменных?

Каким образом размер одной переменной помог бы довыделить память если к примеру надо загрузить изображение 700 на 500, а выделен массив 10 на 10?

Тут и может помочь new и delete

CODE:
int sx=10, sy=10;
int t;
new int Image_0[sx][sy];
t=loadimage (#Image_0[0][0], "C:\Image_0.bmp");
while (t==-2 || t==-3)
{
delete Image_0;
sx=sx+100; sy=sy+50;
new int Image_0[sx][sy];
t=loadimage (#Image_0[0][0], "C:\Image_0.bmp");
}

messagebox(imagewidth(#Image_0[0][0]));
messagebox(imageheight(#Image_0[0][0]));
13. Remyc - 27 Августа, 2021 - 21:03:12 - перейти к сообщению
А как можно проверить выделена память или еще нет?
Например явно объявляем в коде динамический массив и проверяем существует или нет:
CODE:
new int var[10][10];
if (var[0][0]) messagebox("if");
else messagebox("no");

Но если нужно проверить выделялась ли уже память:
CODE:
if (var[0][0]) messagebox("if");
else messagebox("no");
то вылетает ошибка, как-то можно ее обойти?

Дело в чем, загружаю изображения в динамический массив, изображения разных размеров, но массив использую один, и перед загрузкой нужно знать удалять массив и объявлять его с другим размером или нет.
14. Zireael - 28 Августа, 2021 - 01:19:11 - перейти к сообщению
 Цитата:
А как можно проверить выделена память или еще нет?

Добавить переменную. Если память выделена, то присвоить ей значение 1, если не выделена 0. В условии проверять значение переменной.
15. Remyc - 28 Августа, 2021 - 04:30:13 - перейти к сообщению
То есть только флаги использовать... Понял, спасибо за ответ
16. Kibor - 17 Марта, 2022 - 05:14:43 - перейти к сообщению
Для изменения размера глобальной динамичной переменной в функции необходимо указать оператор global. Удаление и выделение глобальных переменных в функциях

CODE:
new int tCN[2][5];
tCN[1][2]=5;

messagebox (tCN[1][2]);
fff();
messagebox (tCN[1][2]);

function fff()
{
delete tCN;
global new int tCN[20][50];
tCN[1][2]=50;
}

Powered by ExBB FM 1.0 Final