建議使用 Visual Studio 2017

C28183

 

發行︰ 2016年7月

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

警告 C28183: 引數可以是一個值,而且是在指標中找到之值的複本

這則警告表示此值不是預期的目前內容。 此警告通常會出現當 NULL 值被當做引數傳遞給不允許其的函式。 值會指定的變數實際上找到,而引數則是該變數的複本。

程式碼分析工具報告這個警告之後才能明確地判斷第一個指標是 NULL 或它包含不合法的值。 不過,它通常是屬於錯誤在發生之前的紀錄中。 發生這種情況,程式碼分析工具會給定一個可能的執行個體的行數,通常在它無法判斷位置警告是否是適當的。 在這些情況下,便會發生這種情況的先前的位置會附加到這個警告訊息。 通常程式碼應該變更在該行號之前,而不是在報告的時候。

在下列範例中,程式碼分析工具判斷 s 是空的,在 if 陳述式以及 if 主體中被取得。 指標 s 再被指派給 t 接著會使用 t 差異可能發生的 NULL

#include <windows.h>  
  
int fun2(char *s)  
{  
    char *t;  
    if (s == NULL) {  
       //... but s is unchanged   
    }  
  
    t = s;  
  
    return lstrlenA(t);  
}  

在這個程式碼範例中,程式碼分析工具會報告下列警告:

d:\sample\testfile.cpp (38):警告 C28183:「t 可以是 0,而是能" s "做 Found 值的複本: 這並未遵守函式的規格 lstrlenA: 在:31, 32, 36, 38行。

顯示: