C 带atoi的Valgrind误差

C 带atoi的Valgrind误差,c,valgrind,C,Valgrind,我正在做这个项目,当我在这行代码上运行valgrind时 int numPointers; numPointers = atoi(argv[NUM_POINTERS_VALUE]); 我得到了一个valgrind误差 大小为1的读取无效[PID:8979] 地址0x0未堆栈化、malloc化或(最近)释放 我想知道这里发生了什么,当您使用命令行参数时,是否有办法解决它,这始终是一个很好的实践 int main() { if(argc != <require

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

  int numPointers;
  numPointers = atoi(argv[NUM_POINTERS_VALUE]);
我得到了一个valgrind误差

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


我想知道这里发生了什么,当您使用命令行参数时,是否有办法解决它,这始终是一个很好的实践

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

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

NUM\u POINTERS\u VALUE
应该始终是
NUM\u POINTERS\u VALUE
包含什么,以及执行什么命令来运行
valgrind
?@Axalo。在本例中,我的argc为2,而NUM\u指针\u值=1@SantoshA我右键单击我的项目,并以valgrind(我的教授教我们的方式)的形式分析您通过命令行参数传递的值是多少?请注意,如果在标准错误上报告错误消息,而不是在标准输出上报告错误消息会更好,如果错误消息给出了预期的用法,并且错误返回状态不是0(表示“确定”或“成功”)。使用1或
EXIT\u FAILURE
作为返回值。@JonathanLeffler感谢您的输入更新了返回值
if(argc[1] != NULL)
numPointers = atoi(argv[1]);