2013-09-01 77 views
3
我在使用MSVS編譯器的問題

忽略未初始化的變量錯誤,我有以下代碼:如何在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

我覺得它令人難以置信的煩人這不是一個警告,而是一個錯誤。將布爾改爲const布爾也無濟於事。是否有人知道如何忽略在Visual Studio此特定錯誤,但仍表現出其他錯誤/警告?

+2

如何添加初始化爲名稱,例如,'字符*名(0);'? –

+0

有什麼理由不使用'的std :: string'?我想你可能知道你案例中的賦值操作是淺拷貝。 – Mahesh

+1

根據http://msdn.microsoft.com/en-us/library/vstudio/jj851030.aspx,這是一個警告。您可以使用'的#pragma警告(禁用:4703)'或更好的修復代碼。 – Jarod42

回答

7

我懷疑你傳遞編譯器選項/sdl,告訴它來治療4703(以及各種其他的東西)的錯誤,而不是警告。

在被偏執的安全性是有意義的把這個作爲一個錯誤的背景 - 編譯器不能證明你正在做什麼是安全的,所以它不會通過讓代碼。如果你不想要,請關閉/sdl

3

還有就是當你創建在Visual Studio 2015年如果啓用該選項,Visual Studio將報告未初始化變量的警告,潛在的其他東西的一部分,更多信息here新建項目(嚮導)複選框SDL checks

如果你已經對SDL的檢查項目,可以從項目屬性,如下面的屏幕截圖禁用它。這樣你就不必處理改變任何命令行參數。

enter image description here