c ++ argv包含未知参数

时间:2016-03-13 22:27:19

标签: c++ debugging argv

在调试我的程序时,我在调试器中看到argv包含我没有写过的参数。 第一个参数是我可执行文件的路径,但它包含很多参数,其中大多数参数甚至都不可访问。

argv

正如您所看到的,我使用了CLion,在运行程序时我没有采取任何争论。它能是什么?

2 个答案:

答案 0 :(得分:2)

您必须查看变​​量argc以获取有效参数的计数。

您可以继续在argv[1000000]向下查看数组,但这并不意味着那里有任何有用的东西。

查看argv[argc-1]以外的任何元素都是毫无意义的。不要这样做。

在您的情况下,我确信argc == 1,唯一有效的参数是argv[0],这是您的计划的名称,serverRun.exe

答案 1 :(得分:2)

不应使用您看到的内容。调试器很可能利用它来跟踪不需要的行为,例如溢出。地址包含 Magic调试值

来自wiki

  

魔术调试值是期间写入内存的特定值   分配或解除分配,以便稍后可以告诉   他们是否已经腐败,并在何时使其显而易见   正在使用从未初始化的内存中获取的值。记忆是   通常以十六进制查看,如此令人难忘的重复或六音   价值观很常见。

     

数值奇数值可能是首选,因此   没有字节寻址的处理器在尝试使用时会出错   它们作为指针(必须落在偶数地址)。值应该是   选择远离可能的地址(程序代码,静态   数据,堆数据或堆栈。)

例如:

ABABABAB 由Microsoft的调试HeapAlloc()用于在分配堆内存后标记“无人登陆”保护字节。

FEEEFEEE “费用”,由Microsoft的调试HeapFree()用于标记释放的堆内存。附近的一些内部簿记值也可能设置为FEEE。

...