OSDev.orghttps://forum.osdev.org/ [SOLVED Strange addition in C++/GCChttps://forum.osdev.org/viewtopic.php?f=13&t=32700 Page 1 of 1

 Author: Tutul [ Sat Jan 20, 2018 11:30 pm ] Post subject: [SOLVED Strange addition in C++/GCC Hi there,I'm using a struct to define a memory area like so:Code:typedef struct {    size_t size; // The size of the memory area    int magic; // Used to detect block header corruption    bool free; // The area is free ?} block;Each block is directly followed by the area of size block->size, and after it, we've got the next block.To find the next block I just need to do p + p->size + sizeof(block) (p is a pointer to a block) yea ?But I've got strange result :/With p=0x106c74, p->size=0xff4 and sizeof(block)=0xc I should got 0x107c74 (as 0x106c74 + 0xff4 + 0xc = 0x106c74 + 0x1000). But when testing with GDB I've got 0x112c74 :/Any idea ? GCC optimization are disabled. Did I miss something with c++ math ?

 Author: bluemoon [ Sun Jan 21, 2018 12:15 am ] Post subject: Re: Strange addition in C++/GCC c++ pointer arithmetic acknowledge the pointer type, if p is pointer to a block type, p + p->size means &p[p->size].so, with sizeof(block) = 12 (32-bits, with padding)Code:p + p->size + sizeof(block)= &p[p->size + sizeof(block)] = 0x106c74 + (0xff4 + 0xc) * 12= 0x106c74 + 0xc000= 0x112c74

 Author: Tutul [ Sun Jan 21, 2018 1:08 am ] Post subject: Re: Strange addition in C++/GCC Oh I feel so stupid right now, didn't think about that. Thanks

 Page 1 of 1 All times are UTC - 6 hours Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Grouphttp://www.phpbb.com/