- check-invalid-reads
check-invalid-reads
在编译过程中, 这个标志将强制检查类型来检测无效的读取。 这可确保使用默认值 (以及内部指针) 正确定义和初始化所有变量。 一个例子:
namespace Acme;class ForInRange{public static function forEmpty(var n){var i;for i in range(1, n) {// Do something}}}
与之比较:
namespace Acme;class ForInRange{public static function forEmpty(var n){var i = null;for i in range(1, n) {// Do something}}}
就Zephir 而言, 这两个例子都是完全有效的。 不同之处在于生成的 c 代码:
zval *n;// ...zephir_fetch_params(1, 1, 0, &n);
与之比较:
zval *n = NULL;// ...zephir_fetch_params(1, 1, 0, &n);
对于任何编程语言, 始终使用默认值和类型初始化变量是一种很好的做法。 不这样做, 可能会给应用程序带来意想不到的后果, 并引入错误、内存泄漏等。 通过在config.json 中使用 check-invalid-read标志我们确保指针和它们各自的C变量被正确初始化。 Zephir 开发人员不会看到他们的代码发生更改。 这将影响生成的C代码。
关于为什么C指针需要在Stack overflow here 中无效的更多信息。
