Показать сообщение отдельно
Старый 23.07.2010, 14:26   #14
Дрон01
Гость
 
Сообщений: n/a
По умолчанию

Код:
    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

Последний раз редактировалось Дрон01; 23.07.2010 в 14:33.
  Ответить с цитированием