2010-06-11 2 views
0

В моем коде я использую массив xyz из 10 объектов. Когда я пытаюсь получить доступ к элементу массива, используя индекс unsigned int, например: xyz[level], я получаю предупреждение 'Buffer overrun. Логично, что я уверен, что уровень не превысит 10. Как избежать этого предупреждения?Избегайте «переполнения буфера» C6386 warning

+6

Можете ли вы опубликовать код, в котором вы получаете предупреждение? –

+0

Не уверен. Это довольно большая база кода, над которой я работаю. Я пытаюсь воспроизвести его небольшим примером. Позвольте мне опубликовать его, когда мне удастся. Благодаря! – bdhar

ответ

9

Я, вероятно, обучая свою бабушку высасывать яйца здесь, но помните, что «уровень не будет превышать 10» является неправильным для массива размера 10:

char a[10]; 
a[10] = '\0'; // Bug, and "Buffer Overrun" warning. 
+0

+1, потому что я уверен, что именно по этой причине OP получает предупреждение. –

+0

Да, это несколько связано с моей проблемой. Я сделал проверку, подобную этой 'if (level <10)' перед тем, как получить доступ к этому «xyz [level]», и предупреждение исчезло. – bdhar

0

Вы действительно уверен ? Я до сих пор не получил этого предупреждения. Итак, дважды проверьте.

Во всяком случае, вы можете использовать директиву препроцессора в

#pragma warning(disable: 6386) 

. Я обычно толкать и поп это в «стек» прагма

#pragma warning(push) 
#pragma warning(disable : 6386) 
// Some code 
#pragma warning(pop) 

here, как советовали.

+1

Это довольно опасно, поскольку предупреждение может быть вызвано ошибкой. Только когда-либо молчание предупреждает, если вы ** ОТЧЕТ **, что вызвало их и что это безвредно. –

Смежные вопросы