Хорошо, я уверен, что это просто до неузнаваемости статического анализатора кода в Visual Studio, но я решил, что больше на него смотреть не повредит.VS2010 Ошибка анализа статического кода?
Я написал собственную коллекцию контейнеров в векторном стиле. Они, кажется, работают нормально, но я заметил следующие предупреждения от Visual Studio статического анализатора кода:
предупреждение C6386: Переполнение буфера: обращающегося «аргумент 1», то записываемый размер «Newspace * 4» байтов , но могут быть записаны байты «4194240».
Вышеуказанное предупреждение появляется в последней строке следующего кода (memcpy) и выделяет все предыдущие строки. Все возможные типы, которые может иметь этот конкретный векторный класс, - POD. mSpace содержит количество элементов, которые может иметь доступная память в векторе, и mSize Текущее количество товаров. mDynamic указывает на блок памяти, который в настоящее время управляется вектором.
Bool Insert(UInt32 index, TYPE value, UInt32 count = 1)
{
if(index < mSize)
{
UInt32 newsize = mSize + count;
if(newsize > mSpace)
{
UInt32 newspace = std::max(Align(newsize, 8), mSpace << 1);
TYPE* ptr = new TYPE[ newspace ];
if(ptr)
{
memcpy(ptr, mDynamic, index * sizeof(TYPE));
// The remainder of the code copies the second half of the
// existing data and inserts the new values...
Я никогда смотрел на это, пока мой глаз обрез (ну, почти) и не может понять, почему анализатор будет генерировать предупреждение. Я видел то же предупреждение в других местах и с довольно странным значением 4194240, поэтому я предполагаю, что это еще одна ошибка в анализаторе.
Может кто-нибудь подтвердить, что это известная ошибка в анализаторе (очень быстрый поиск соединения не дал никаких результатов), или есть явная ошибка в моем коде, которую я просто не вижу?
4194240 - 2^22 - 2^6. Не уверен, что это релевантно ... –
Похож на довольно ложное предупреждение для меня ... Предупреждает ли это предупреждение только при создании экземпляра определенного типа? Например, будет ли это отображаться, если вы изолируете свой класс в проекте без клиентов? –
И, возможно, попробуйте запустить свой код через другой инструмент [http://stackoverflow.com/questions/141498/what-open-source-c-static-analysis-tools-are-available) ... –