Запись 8 байт в переменную на 4 байта
От:
Аноним
Дата: 18.08.09 09:38
Оценка:
Есть функция:
BOOLEAN HashAdd(
__in ULONG value,
__in ULONG data,
__inout ULONG *table,
__out_opt ULONG *dataTable,
__in ULONG tableSize)
{
ULONG i = value % tableSize;
BOOLEAN cycle = FALSE;
while (table[i] > 0)
{
i++;
if (i == tableSize)
{
if (cycle)
{
return FALSE;
}
else
{
i = 0;
cycle = TRUE;
}
}
}
table[i] = value;
if (dataTable) dataTable[i] = data;
return TRUE;
}
http://www.microsoft.com/whdc/devtools/tools/prefast.mspx на строчке
if (dataTable) dataTable[i] = data;
выдает сообщение
(PFD)Buffer overrun while writing to 'dataTable': the writable size is '1*4' bytes, but '8' bytes may be written.
Код 32-битный, как могут быть записаны 8 байт я понять не могу.
Может глюк PreFast?
Re: Запись 8 байт в переменную на 4 байта
Здравствуйте, Аноним, Вы писали:
А>Может глюк PreFast?
Возможно. Если работаешь с Visual Studio, включи режим предупреждений /W4 и посмотри на варнинги.
With best regards
Pavel Dvorkin
Re[2]: Запись 8 байт в переменную на 4 байта
От:
Weberd
Дата: 18.08.09 10:28
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Возможно. Если работаешь с Visual Studio, включи режим предупреждений /W4 и посмотри на варнинги.
Попробовал /W4. Ничего насчет этой функции нет.
Re[3]: Запись 8 байт в переменную на 4 байта
От:
Weberd
Дата: 18.08.09 10:51
Оценка:
Может быть проблема в том, что я передаю в эту функцию HANDLE, а он 64-битных системах занимает 8 байт, в то время как ULONG остается размером 4 байта?
Re: Запись 8 байт в переменную на 4 байта
Здравствуйте, Аноним, Вы писали:
А>Есть функция:
А> __out_opt ULONG *dataTable,
А> __in ULONG tableSize)
простые указатели PREFast считает указателями на один элемент. Надо было примерно так:
__out_opt_ecount(tableSize) ULONG *dataTable,
если tableSize в элементах (а не в байтах).
Re[4]: Запись 8 байт в переменную на 4 байта
От:
byleas
Дата: 18.08.09 13:27
Оценка:
Здравствуйте, Weberd, Вы писали:
W>Может быть проблема в том, что я передаю в эту функцию HANDLE, а он 64-битных системах занимает 8 байт, в то время как ULONG остается размером 4 байта?
Да.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить