Что означает "Случайная ошибка" для man-страницы va_arg - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть фрагмент кода, который принимает максимум 8 переменных аргументов.

Но иногда я передаю менее 8 аргументов.

Я не передаю числопараметры в вызове моей функции, но число, которое декодирует в мой формат строки.

Страница man va_arg говорит: «Если нет следующего аргумента или если тип не совместим с типом фактического следующегоаргумент (как продвигается в соответствии с продвижением аргумента по умолчанию), произойдут случайные ошибки. "

Я не вижу никаких ошибок во время выполнения кода.

В GDB я вижу, что случайные значения мусораприсваивается моему arg [I].

Так что же это за «случайная ошибка», на которую ссылается man-страница?

uint64 arg[8];
va_list ap;
va_start(ap, num); // num is not number of args, it is function arg
for(int i = 0; i < 8; i++)
  arg[i] = va_arg(ap, uint64);
va_end(ap);
...