Попробуйте использовать sizeof
вместо жесткого кодирования размера.Пусть компилятор работает для вас.
Во-вторых, второй аргумент pread
выглядит как указатель на буфер, который вы намереваетесь заполнить.Вы передаете само поле int (по значению) - обычно компилятор C более чем рад рассматривать int как указатель.Вам нужно передать поле int по ссылке , чтобы у pread
был указатель на int, который он должен заполнить октетами.Вы получаете нарушение доступа к памяти (неверный адрес), потому что значение поля int, которое вы передаете по значению, рассматривается как адресная точка в ячейке памяти, вам не разрешается прикасаться.
Первый pread()
работает, потому что (я подозреваю), что structure->str
является либо char*
, либо массивом символов, которые будут обрабатываться как указатель.
if ( pread(heap,structure->str,STRING_MAX_LEN,0) < 0 )
{
return -1;
}
else
{
printf("read str\n");
}
if ( pread(file,&(structure->size), sizeof(structure->size) , STRING_MAX_LEN + 1 ) < 0 )
{
return 0 ;
}
else
{
printf("read size\n");
}