2016-09-06 181 views

回答

8

documentation說:

你已經使用的數據類型或操作,其靜態代碼分析不能證明它不會覆蓋內存。這樣的代碼可能被認爲是安全風險。

例如,使用GetMem可以引發此警告,因爲內存塊沒有關聯類型。

有真的只有兩個辦法,以避免這些警告:

  1. 禁用警告。
  2. 更改代碼以停止使用不安全的內存訪問。

這兩個選項在某些情況下可能有用。例如,考慮Embarcadero的支持動態數組的Delphi RTL代碼。它需要能夠分配內存,並使用這種不安全的操作訪問內存。這種基本的庫代碼需要能夠使用不安全的操作。考慮到你自己的代碼,如果你需要執行不安全的代碼,你可能會將它隔離成一個單元或一個單元的一部分,並禁用該代碼的警告。

打開第二項。您可能有可能使用指針替換使用其他構造的代碼。例如,你可能有代碼使用指針算術,而不是使用數組寫入。我相信這些警告是introduced to help developers migrate code to the long since abandoned Delphi .net compiler。所以你可能會認爲,既然你沒有瞄準.net,你可以簡單地禁用這些警告。另一方面,我可以看到哪些場景可以有效地啓用警告,並警示可能更具風險的代碼區域。這是你的選擇。

+0

是的,這個警告是作爲.NET編譯器的準備而引入的。其他編譯器可以安全地忽略它。 –

+0

或者如果您希望對此類代碼發出警告,則可以安全啓用。無論哪種方式。 –

5

這些警告僅適用於.NET兼容性(和誤稱詞IMNSHO)。禁用並忘記它們。