2016-09-06 175 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)。禁用并忘记它们。