c++ - 是否可以出于调试目的在 C/C++ 中定义/扰乱不确定值?

标签 c++ c

未初始化的变量可能有不确定的值,如this回答一个较早的问题指出。有没有一种方法可以将这种不确定的数据指定为重复 0xDEADDEAD?不确定的数据显然是特定于编译器的,但最好将其强制为易于识别的内容。

是否存在允许这样做的现有内存泄漏/损坏检测库?在某些情况下,重载 new 似乎是一种解决方案,但我不想自己深入研究这种技巧。

问题是不确定的值通常会导致代码的未定义行为,并且很少发生运行时错误,因此,例如,如果我忘记了 memset(),我想指出在我的代码中的某个地方。甚至随机化不确定的值也可以作为测试平台。

如果这不可能,是否有更好的方法来解决问题?

最佳答案

以下是生成高质量 C 代码的一些指南:

  1. 创建/使用有助于避免内存错误(和其他类型的错误)的编码指南。网上有很多例子。最好的方法是查看 5 或 6 并将其编译成一个,只保留适合需要的内容。
  2. 使用代码审查/检查来查找错误并检查是否遵守编码指南。代码审查是发现工具无法检测到的错误的最佳方法之一。代码审查对于初学者/中级程序员来说尤为重要,因为它会增加您的学习曲线,无论是您审查其他人编写的代码还是您被审查时。
  3. 使用可以自动运行的测试用例测试您的代码。
  4. 使用 valgrind 等工具查找多种类型的错误。

关于c++ - 是否可以出于调试目的在 C/C++ 中定义/扰乱不确定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10860220/

相关文章:

c - 使用 mysql_stmt_prepare 时如何引用 char* 而不是使用 char[]

python - 为 Ubuntu 发布

c - 解释值驻留在 Linux 32 位进程地址空间中的位置

c - C语言编程中的位域

c++ - 在没有警告/错误的情况下对引用进行隐式重新解释

C - sscanf 不工作

c - sscanf 在未知大小的矩阵上的用法?

android - 是否可以通过编译的二进制文件在 Android 中生成本地缓冲区溢出以获得 root 访问权限?

c++ - 使用 OpenCL 的二维嵌套循环求和

c++ - 在 switch 语句中使用字符串——我们在 C++17 中的立场是什么?