我有一個stucture這兩個地址如何可以有所不同?
typedef struct s_block
{
size_t size;
struct s_block *next;
struct s_block *back;
int free;
void *data;
} t_block;
我初始化這樣說:
int createHeader()
{
void *data;
data = sbrk(BLOCK_SIZE + (sizeof(t_block) * 2));
header = data;
header->next = header;
header->back = header;
header->size = 0;
createNewBlock(data + sizeof(t_block), BLOCK_SIZE + sizeof(t_block), 0);
return 0;
}
void *createNewBlock(void *beginAddress, size_t size, int free)
{
printf("%d\n", size);
t_block *newBlock;
printf("first %p\n", beginAddress);
printf("addr : %p\n", beginAddress + size);
newBlock = beginAddress;
newBlock->back = header->back;
newBlock->next = header;
newBlock->size = size;
newBlock->free = free;
newBlock->data = beginAddress + sizeof(t_block);
header->back->next = newBlock;
header->back = newBlock;
header->size++;
show_alloc_mem();
return newBlock->data;
}
當我在createNewBlock
顯示beginAddress
,給出的地址是好的,當我顯示beginAddress + size
的ADRESS,它給我正確的地址:
140
first 0x18f9028
addr : 0x18f90b4
但是當我輸入我的功能show_alloc_mem()
void show_alloc_mem()
{
t_block *tmp;
tmp = header->next;
printf("break : %p\n", header);
while (tmp != header)
{
if (tmp->free == 1)
printf("%p - %p : %d bytes\n", tmp, tmp + tmp->size, (int)tmp->size);
else
printf("free: %p - %p : %d bytes\n", tmp, tmp + tmp->size, (int)tmp->size);
tmp = tmp->next;
}
}
發生了奇怪的行爲。 標題地址和tmp地址是正確的。但是tmp + size
的地址不是。
break : 0x18f9000
free: 0x18f9028 - 0x18fa608 : 140 bytes
你知道爲什麼嗎?
你有沒有注意到新的區別*正好是* 40 * 140? –