2016-03-13 2 views
0

При отладке моей программы я видел в отладчике, что argv содержит аргументы, которые я не писал. Первый аргумент - мой путь к исполняемому файлу, но тогда он содержит много аргументов, большинство из которых даже недоступны.C++ argv содержит неизвестные аргументы

argv

Как вы можете видеть, я использую CLion и я не брал никаких аргументов при запуске моей программы. Что это может быть ?

ответ

2

Вы должны посмотреть переменную argc на количество допустимых аргументов.

Вы можете продолжать смотреть дальше по массиву на argv[1000000], но это не значит, что там что-то полезное.

Рассмотрение любого элемента за пределами argv[argc-1] не имеет смысла. Не делай этого.

В вашем случае, я уверен, что argc == 1, и единственный правильный аргумент argv[0], что название вашей программы, serverRun.exe

+0

Спасибо большое, это странно, что CLion попытаться взглянуть на эти переменные, думали, что это был плохой ход от себя – Kariamoss

+0

Должен сказать, «за' ARGV [ARGC] '». Он определен как нулевой указатель. –

2

Содержание вы видите не должны использоваться. Это очень вероятно, используется отладчиком для отслеживания нежелательных действий, таких как переполнение. Адреса содержат Магические значения отладки.

От wiki:

Волшебное отлаживать значения конкретные значения, записанные в памяти во время выделения или открепления, так что это будет позже можно сказать , были ли они повреждены, и сделать это очевидным, когда используются значения , взятые из неинициализированной памяти. Память обычно рассматривается в шестнадцатеричном виде, поэтому запоминающиеся повторяющиеся или шестнадцатеричные значения являются общими.

Числовые нечетные значения могут быть предпочтительными, так что процессоры без байтовой адресации будут ошибочными при попытке использовать в качестве указателей (которые должны падать на четные адреса). Значения должны быть выбраны в , которые находятся вдали от вероятных адресов (код программы, статические данные , данные кучи или стек).

Например:

ABABABAB: Используется отладки HeapAlloc от Microsoft(), чтобы отметить "ничейная земля" сторожевые байт после того, как выделяется память кучи.

FEEEFEEE: "Плата за сбор", Используется отладки HeapFree от Microsoft(), чтобы отметить освобожденной памяти кучи. Некоторые близлежащие внутренние бухгалтерские ценности могут иметь высокое слово, установленное для FEEE.

...

Смежные вопросы