Код:
int inv_slot_items[INVENTORY_SLOT_ITEM_END-INVENTORY_SLOT_ITEM_START];
int inv_bags[INVENTORY_SLOT_BAG_END-INVENTORY_SLOT_BAG_START][MAX_BAG_SIZE];
int inv_keys[KEYRING_SLOT_END-KEYRING_SLOT_START];
int inv_tokens[CURRENCYTOKEN_SLOT_END-CURRENCYTOKEN_SLOT_START];
memset(inv_slot_items,0,sizeof(int)*(INVENTORY_SLOT_ITEM_END-INVENTORY_SLOT_ITEM_START));
memset(inv_bags,0,sizeof(int)* MAX_BAG_SIZE*([INVENTORY_SLOT_BAG_END-INVENTORY_SLOT_BAG_START));
memset(inv_keys,0,sizeof(int)*(KEYRING_SLOT_END-KEYRING_SLOT_START));
memset(inv_tokens,0,sizeof(int)*(CURRENCYTOKEN_SLOT_END-CURRENCYTOKEN_SLOT_START));
Как пример. Прошу заметить, inv_bags - двумерный массив, в первичном массиве хранятся лишь указатели на адреса одномерных вложенных массивов. Такое обнуление мемсетом режет их на корню.
Цитата:
Ваши предложения как обнулять их?
|
Почему бы и не (другой пример)
Код:
//smwhr in MapInstanced.h
uint16 GridMapReference[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS];
//smwhr in MapInstanced.cpp
for(int i = 0; i < MAX_NUMBER_OF_GRIDS; ++i)
memset(GridMapReference[i], 0, MAX_NUMBER_OF_GRIDS*sizeof(uint16));
Как-то так?
Цитата:
вобще через memset некоторые вещи нельзя обнулять, например массивы из float, в котором 0 не на всех платформах равен логическому нулю
|
Согласен. Более того, режим _debug на многих платформах предварительно зануляет выделяемую память, что приводит к невозможности отследить ошибки неинициализации переменных в режиме _release