Будет ли утечка памяти? ArrayList + Forward

NaN

FPE_INTDIV_TRAP
Сообщения
1,513
Реакции
1,487
А подскажите пожалуйста если я в функцие создал мессив такого типа any[] array = new any[lrte]; и выгрузил в нее данные я могу просто выйти из функции или нужно как-то очистить данные из нее чтоб не было утечек? или SM сам это делает ?
на каждый вызов new должен быть вызов delete
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #22
на каждый вызов new должен быть вызов delete
Это не применимо к SP. SP сам должен очистить, но, по моим наблюдениям, на старых версиях этого точно не делал. Мб на свежаке исправили.
 

Banana

Участник
Сообщения
892
Реакции
113
Это не применимо к SP. SP сам должен очистить, но, по моим наблюдениям, на старых версиях этого точно не делал. Мб на свежаке исправили.
так вы рекомендуете все же делать после каждого new - delete на всякий случай? (это из C++ правило на сколько я помню)
Сообщения автоматически склеены:

на каждый вызов new должен быть вызов delete
delete array; ?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #24
так вы рекомендуете все же делать после каждого new - delete на всякий случай? (это из C++ правило на сколько я помню)
А Вы уверены, что компилятор Вам вообще даст применить delete над примитивами? Я вот - нет.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Компилятор просто сошлётся на отсутствие деструктора у примитивных(базовых) типов и отплюнет ошибку.
 
Последнее редактирование:

Banana

Участник
Сообщения
892
Реакции
113
Компилятор просто сошлётся на отсутствие деструктора у примитивных(базовых) типов и отплюнет ошибку.
кароче не нужно чистить такие данные ? они тупо как локальные переменные если вышли из функции они очистились верно?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #27
они тупо как локальные переменные если вышли из функции они очистились верно?
SP сам должен очистить
Но, опять же, повторюсь. Когда я давно это тестил, у меня такие переменные иногда не удалялись, и рано или поздно место в куче заканчивалось. В общем, я бы от использования этой фишки с объявлением массивов заранее неизвестного размера - воздержался. Строго на свой страх и риск.
 

Banana

Участник
Сообщения
892
Реакции
113
А как вы вообще проверили что память не очищается? Просто у меня много где используются такие массивы...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #29
А как вы вообще проверили что память не очищается?
Спустя некоторое время после запуска сервера и нескольких проходов по таким функциям, мне сам SP жаловался, что он часть памяти не может найти, куда посеял.
https://github.com/alliedmodders/so...5491a13d446f3/vm/plugin-context.cpp#L467-L472
А оно уже выше по стеку через SM вылезает.
 

Banana

Участник
Сообщения
892
Реакции
113
Жесть как все не понятно, у меня куча плагинов так написана и я заметил что у меня есть утечка памяти (по мониторингу майрена) ... я вот думаю может я handle где-то не закрыл ... а теперь еще и это... даже хз как это все протестить..
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
Помнится мне кто-то втирал, что создание массива с статичным размером вместо динамического - это нифига не оптимизация.
Чего-то запамятовал, кто это мне писал, а искать лень.
 

Banana

Участник
Сообщения
892
Реакции
113
Помнится мне кто-то втирал, что создание массива с статичным размером вместо динамического - это нифига не оптимизация.
Чего-то запамятовал, кто это мне писал, а искать лень.
Так что вы мне порекомендуете?
C-подобный:
StringMap hLastRulesTest;

enum lrte
{
    String:lrte_name[75],
    String:lrte_steamid[32],
    lrte_result,
    lrte_questions,
    lrte_end,
    lrte_error,
    String:lrte_comment[32]
}
для того чтоб удобно записывать и получать данные из нужного ключа вот так:
C-подобный:
any[] array = new any[lrte];
    hLastRulesTest.GetArray(select, array, lrte);

Как можно сделать это максимально удобно без риска утечки памяти?
 

NaN

FPE_INTDIV_TRAP
Сообщения
1,513
Реакции
1,487
Так что вы мне порекомендуете?
C-подобный:
StringMap hLastRulesTest;

enum lrte
{
    String:lrte_name[75],
    String:lrte_steamid[32],
    lrte_result,
    lrte_questions,
    lrte_end,
    lrte_error,
    String:lrte_comment[32]
}
для того чтоб удобно записывать и получать данные из нужного ключа вот так:
C-подобный:
any[] array = new any[lrte];
    hLastRulesTest.GetArray(select, array, lrte);

Как можно сделать это максимально удобно без риска утечки памяти?
Смотрю на повсеместное использование any и во мне умирает программист C/C++
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #36
enum struct тут вполне нормально зайдет.
 

Banana

Участник
Сообщения
892
Реакции
113
Смотрю на повсеместное использование any и во мне умирает программист C/C++
я чего-то не понимаю или это просто плоский юмор? Вы или пишите пожалуйста по сути или игнорируйте мои вопросы. Чем не уместно использование any в таком формате?

PS. забавляют "6" которые поддерживают оффтоп... интересно как они на себя смотрят? D)
 
  • Фэйспалм
Реакции: NaN

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
PS. забавляют "6" которые поддерживают оффтоп... интересно как они на себя смотрят? D)

Все зависит от системы счисления, если приверженцы 8,10,16 - ричной выглядят одинаково, то двоичникам приходится не сладко.
 

Banana

Участник
Сообщения
892
Реакции
113
C-подобный:
enum mtp
{
    mtp_end,
    String:mtp_a_steamid[32]
}

void Func()
{
char a_Steam_ID[32];
GetClientAuthId(client, AuthId_Steam3, a_Steam_ID, sizeof(a_Steam_ID));
any array_micro[mtp];
array_micro[mtp_a_steamid] = a_Steam_ID; //error 047: array sizes do not match, or destination array is too small
}

Господа подскажите в чем проблема?

Я конечно могу через Format записать принудительно, но хотелось бы понять почему так не получается?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
Banana, а так?
C-подобный:
void Func()
{
    any array_micro[mtp];
    GetClientAuthId(client, AuthId_Steam3, array_micro[mtp_a_steamid], 32);
}
 
Сверху Снизу