Настраиваемые значения мусора при печати printfLinux

Ответить
Anonymous
 Настраиваемые значения мусора при печати printf

Сообщение Anonymous »

Я написал специальную функцию printf под названием «cprintf», которая представляет собой вариативную функцию.

Код: Выделить всё

int cprintf (const char* format, ...) {

int i;
va_list args;
int msg_len;
tlv_struct_t *tlv;
bool patt_rc = false;
bool inc_exc_pattern_present = false;

pthread_spin_lock (&cprintf_spinlock);

va_start(args, format);
memset (Obuffer, 0, OBUFFER_SIZE);
vsnprintf((char *)Obuffer, OBUFFER_SIZE, format, args);
msg_len = strlen ((const char *)Obuffer);

va_end(args);

if (filter_array_size == 0) {

printf("%s", Obuffer);
pthread_spin_unlock (&cprintf_spinlock);
return 0;
}
Вызывающий абонент

Код: Выделить всё

void
dump_interface_stats(Interface *interface){

cprintf("%s   ::  PktTx : %u, PktRx : %u, Pkt Egress Dropped : %u",
interface->if_name.c_str(), interface->pkt_sent,
interface->pkt_recv,
interface->xmit_pkt_dropped);
}
Но результат:

Код: Выделить всё

(null)   ::  PktTx : 1711276032, PktRx : 16777386, Pkt Egress Dropped : 0
(null)   ::  PktTx : 1761607680, PktRx : 16777471, Pkt Egress Dropped : 0

which suggest all parameters are nothing but just garbage.
gdb в функцию, и я проверяю, что все параметры в структуре данных "интерфейс" верны.

Код: Выделить всё

Thread 6 "tcpstack.exe" hit Breakpoint 2, dump_interface_stats (interface=0xfffff490b730) at net.c:182
182         cprintf("%s   ::  PktTx : %u, PktRx : %u, Pkt Egress Dropped : %u",
(gdb) n
186     }
(gdb) p interface
$7 = (Interface *) 0xfffff490b730
(gdb) p interface->if_name
$8 = "eth1"
(gdb) p interface->pkt_sent
$9 = 0
(gdb) p interface->pkt_recv
$10 = 0
(gdb) p interface->xmit_pkt_dropped
$11 = 0
(gdb)
Не похоже на повреждение памяти. vsnprintf, похоже, работает неправильно. Я использую тот же cprintf для печати других данных, и там он работает просто великолепно.

Подробнее здесь: https://stackoverflow.com/questions/792 ... age-values
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»