Size: a a a

IT KPI C/С++ ХВ (хорошо, что не UB)

2020 March 04

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
а мне нужно вывести адрес, который хранится по адресу PTR+9
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
У тебя %р
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
я так понимаю это поинтер на поинтер по идее
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
Нет
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
Тогда тебе надо скастить на void**
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
Сам по себе воид это ничего
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
сейчас обьясню
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
а, стоп, минуту
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
мне сначала нужно записать структуру по поинтеру, а потом уже доступаться к её элементам
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
я строчку пропустил
typedef struct header{
   bool status;    // 1
   size_t size;    // 8
   void* next;     // 8
   void* previous; // 8
}header_t;

int main(){
   void* PTR = malloc(800);


   header_t a;
   a.status = false;
   a.size = 14;
   a.next = &a;
   
   *((header_t*)PTR) = a;

   printf("%d\n", *((bool*)PTR));
   printf("%ld\n", *((size_t*)(PTR+8)));
   printf("%p\n", *(void*)(PTR+9));
   printf("%p", &a);

   return 0;
}
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
вот, а это структура, я в ней в status пишу false, в size 14 и в next записываю ссылку на а

при попытке вывода первые две выводятся норм, а next
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
Мб тогда ptr = malloc(sizeof(header_t));?
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
И мб лучше будет поменять местами header и header_t в тайпдефе?
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
всёравно ошибка
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
Ruslan Neshta
И мб лучше будет поменять местами header и header_t в тайпдефе?
ошибка всёравно остается
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
Какая?
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
в малоке будет не один header, а несколько
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
С поинтером?
источник

RM

Roma Myronenko in IT KPI C/С++ ХВ (хорошо, что не UB)
Ruslan Neshta
С поинтером?
да
источник

RN

Ruslan Neshta in IT KPI C/С++ ХВ (хорошо, что не UB)
Ruslan Neshta
Тогда тебе надо скастить на void**
Вот
источник