【问题标题】:Valgrind error with atoiatoi 的 Valgrind 错误
【发布时间】:2015-01-28 04:59:04
【问题描述】:

我正在做这个项目,当我在这行代码上运行 valgrind 时

  int numPointers;
  numPointers = atoi(argv[NUM_POINTERS_VALUE]);

我得到一个 valgrind 错误

大小为 1 的无效读取 [PID: 8979] 地址 0x0 没有被堆栈、malloc 或(最近)释放

我想知道这里发生了什么,是否有办法解决它

【问题讨论】:

  • NUM_POINTERS_VALUE 应始终为 < argc
  • NUM_POINTERS_VALUE包含什么,你执行什么命令来运行valgrind
  • @Axalo 它是。在这种情况下,我的 argc 是 2 而 NUM_POINTERS_VALUE = 1
  • @SantoshA 我正在右键单击我的项目并分析为 valgrind(我的教授教我们的方式)
  • 你通过命令行参数传递的值是什么?

标签: c valgrind


【解决方案1】:

当您使用命令行参数时,使用它始终是一个好习惯

   int main()
   { 
     if(argc != <required number of argument>)
     {
       printf("Fewer arguments in the input\n");
       return 1;
     }
     // Do your stuff
   }

稍后

if(argc[1] != NULL)
numPointers = atoi(argv[1]);

因为atoi(NULL) 会导致未定义的行为导致崩溃。

【讨论】:

  • 请注意,如果错误信息报告在标准错误而不是标准输出上,如果错误信息给出了预期的用法,并且错误返回状态不是 0(表示 OK 或'成功')。使用 1 或 EXIT_FAILURE 作为返回值。
  • @JonathanLeffler 感谢输入更新了返回值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多