在调试我的程序时,我在调试器中看到argv包含我没有写过的参数。 第一个参数是我可执行文件的路径,但它包含很多参数,其中大多数参数甚至都不可访问。
正如您所看到的,我使用了CLion,在运行程序时我没有采取任何争论。它能是什么?
答案 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。
...