未定义的行为:代码审查的清单

Alo*_*ave 6 c++ undefined-behavior

可能重复:
C++程序员应该知道的所有常见的未定义行为是什么?

我准备为C++自我和同行代码评审准备一份清单或指南,因为有太多的场景可能导致可怕的领域Undefined Behavior,我想要提出一种在大多数使用最多的未定义行为的清单C++语言结构.

当然,不可能通过修改变量来预测未定义的行为,Sequence points但我认为可以列出从其他场景中发现的场景.

如果您正在执行代码审查,Undefined Behavior您会注意哪些常见的生成方案?

Ali*_*232 1

仅删除新增的指针。例如,您无法调用p = new int [5];delete p+2;这可能会导致未定义的行为。

另外,当尝试使用 dll 时,仅使用原始类型,因为不同的编译器会创建不同的内存布局,如果您尝试交换类或结构,这可能会导致一些问题。

我能想到的另一件事是留意已删除的内存,在某些情况下,您可以从这些位置写入和读取,而不会出现任何错误或访问冲突,但它始终是未定义的行为。

  • 关于未定义行为的令人惊奇的事情之一是,在某些编译器/环境下,它可能看起来定义良好。 (3认同)