Я уже сталкивался с этой проблемой в течение нескольких дней и имел некоторые способы обхода, но мне нужно понять, в чем я ошибаюсь.Неверное чтение размера 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".
Может кто-нибудь пролить некоторый свет это делает мою голову ....
Ваша строка формата имеет один «параметр», вы передаете две вещи. Не работает. – Mat
Любой хороший компилятор должен был сказать вам, что эта строка является подозрительной, если вы собрали все уровни предупреждений. Со многими компиляторами на POSIX-системах (что кажется вам для вас) это может быть достигнуто с помощью '-Wall'. Не игнорируйте ни одно из таких предупреждений, если вы точно не знаете, что делаете. –
только для уточнения, я думал, что это та же проблема, что и в других местах моей программы. Очевидно, это не так. и да, я должен сейчас уделять пристальное внимание компилятору – Chris