Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: new и delete позволяют динамично выделять память и удалять ее
Dantes3000
Отправлено: 19 Июля, 2018 - 00:33:34
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




Не догоняю в чем реальный смысл этих функций, если в киборе даже обычный флаг 0 или 1 нужно записывать в int, который рассчитан на число до двух миллиардов.
 
 Top
Kibor
Отправлено: 19 Июля, 2018 - 10:18:45
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 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]));
 
 Top
Remyc
Отправлено: 28 Августа, 2021 - 05:03:12
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019  
Репутация: 1




А как можно проверить выделена память или еще нет?
Например явно объявляем в коде динамический массив и проверяем существует или нет:
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");
то вылетает ошибка, как-то можно ее обойти?

Дело в чем, загружаю изображения в динамический массив, изображения разных размеров, но массив использую один, и перед загрузкой нужно знать удалять массив и объявлять его с другим размером или нет.
 
 Top
Zireael
Отправлено: 28 Августа, 2021 - 09:19:11
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
А как можно проверить выделена память или еще нет?

Добавить переменную. Если память выделена, то присвоить ей значение 1, если не выделена 0. В условии проверять значение переменной.
 
 Top
Remyc
Отправлено: 28 Августа, 2021 - 12:30:13
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019  
Репутация: 1




То есть только флаги использовать... Понял, спасибо за ответ
 
 Top
Kibor
Отправлено: 17 Марта, 2022 - 12:14:43
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Для изменения размера глобальной динамичной переменной в функции необходимо указать оператор 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;
}
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by