2013-09-01 2 views
3

У меня возникли проблемы с МСВС компилятором, у меня есть следующий код:Как игнорировать неинициализированные переменные ошибки в MSVC

if (!list) { 
    *type = raw_data[*i++]; 
    ptr = (char*) &size; 
    ptr[1] = raw_data[*i++]; 
    ptr[0] = raw_data[*i++]; 
    name = new char[size+1]; 
    memcpy (name, raw_data+*i, size); 
    name[size] = '\0'; 
    *i += size; 
} 

И далее:

if (!list) { 
    s->name = name; 
    s->name_size = size; 
} 

Значение списка не изменение этой функции, однако я не могу скомпилировать код из-за этой ошибки:

Error 1 error C4703: potentially uninitialized local pointer variable 'name' used

Я нахожу это невероятно раздражающим что это не предупреждение, а ошибка. Изменение bool на const bool тоже не помогает. Кто-нибудь знает, как игнорировать эту конкретную ошибку в Visual Studio, но все же показывать другие ошибки/предупреждения?

+2

Как о добавлении инициализации для имени, например, 'символ * имя (0);'? –

+0

Есть ли причина не использовать 'std :: string'? Я думаю, вы, возможно, знаете, что операция назначения в вашем случае является мелкой копией. – Mahesh

+1

В соответствии с http://msdn.microsoft.com/en-us/library/vstudio/jj851030.aspx это предупреждение. Вы можете использовать '#pragma warning (disable: 4703)' или лучше исправить код. – Jarod42

ответ

7

Я подозреваю, что вы передаете компилятору параметр /sdl, в котором говорится, что он обрабатывает 4703 (и другие вещи) как ошибку, а не предупреждение.

В контексте параноика о безопасности имеет смысл рассматривать это как ошибку - компилятор не может доказать, что то, что вы делаете, безопасно, поэтому он не пропускает код. Если вы этого не хотите, отключите /sdl.

3

Флажок SDL checks при создании нового проекта (мастера) в visual Studio 2015. Если это разрешено, Visual Studio сообщит неинициализированные переменные как предупреждение как часть возможных других вещей, больше информации here.

Если у вас уже есть проект с проверкой SDL, вы можете отключить его из свойств проекта, как показано на снимке экрана ниже. Таким образом вам не придется иметь дело с изменением любых аргументов командной строки.

enter image description here

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