2013-11-16 5 views
0

Я уже сталкивался с этой проблемой в течение нескольких дней и имел некоторые способы обхода, но мне нужно понять, в чем я ошибаюсь.Неверное чтение размера 1 при доступе к элементу структуры

Это ошибка Valgrind, которая вызывает ошибку сегментации и зависания

==14609== Invalid read of size 1 
==14609== at 0x4E80F90: vfprintf (vfprintf.c:1655) 
==14609== by 0x4E87F56: fprintf (fprintf.c:32) 
==14609== by 0x4017ED: display_tickets (tm_options.c:261) 
==14609== by 0x400E5D: main (tm.c:83) 
==14609== Address 0xa is not stack'd, malloc'd or (recently) free'd 

Код я пытаюсь запустить довольно просто.

void display_tickets(tm_type *tm) { 

struct stock_data data; 
struct stock_node *current; 
memcpy(&data, tm->stock->head_stock->data, sizeof(tm->stock->head_stock->data)); 

    printf("%s", data.ticket_name); /*THIS WORKS, name is as expected*/ 
    fprintf(stdout, "Name is %s", 40, data.ticket_name); /*this causes the read error*/ 

} 

ticket_name это просто строка (размер 40), который является членом "STRUCT stock_data".

Может кто-нибудь пролить некоторый свет это делает мою голову ....

+1

Ваша строка формата имеет один «параметр», вы передаете две вещи. Не работает. – Mat

+0

Любой хороший компилятор должен был сказать вам, что эта строка является подозрительной, если вы собрали все уровни предупреждений. Со многими компиляторами на POSIX-системах (что кажется вам для вас) это может быть достигнуто с помощью '-Wall'. Не игнорируйте ни одно из таких предупреждений, если вы точно не знаете, что делаете. –

+0

только для уточнения, я думал, что это та же проблема, что и в других местах моей программы. Очевидно, это не так. и да, я должен сейчас уделять пристальное внимание компилятору – Chris

ответ

5

На линии:

fprintf(stdout, "Name is %s", 40, data.ticket_name); 

Ваш указать формат %s, который ожидает следующий неиспользуемый аргумент должен быть строкой, но вы передаете int (40). Удалите 40,, и он должен работать. (Или вы имели в виду формат %*s?)

+0

Ничего себе, и здесь я был настолько расстроен, когда вы были в задании на этот срок ... все становится размытым. спасибо – Chris

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