OSDev.org https://forum.osdev.org/ |
|
[SOLVED Strange addition in C++/GCC https://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 Group http://www.phpbb.com/ |