Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- t_block *checkMergeTop(t_block *currentBlock)
- {
- t_block *previousBlock;
- int previousBlockSize;
- if ((void *)currentBlock > firstAddress + sizeof(t_block))
- {
- previousBlockSize = *(int *)((void *)(currentBlock) - (int)sizeof(int));
- if (previousBlockSize <= 0)
- return (NULL);
- previousBlock = (void *)(currentBlock) - previousBlockSize;
- previousBlock->size += currentBlock->size;
- previousBlock->footerSize = (void *)(previousBlock) + previousBlock->size - (int)sizeof(int);
- *previousBlock->footerSize = previousBlock->size;
- currentBlock->magicNumber = 0;
- return (previousBlock);
- }
- return (NULL);
- }
- int checkMergeBot(t_block *currentBlock)
- {
- t_block *nextBlock;
- if ((void *)currentBlock + currentBlock->size + sizeof(t_block) < sbrk(0))
- {
- printf("currentBlock %pnsize %dn", (void *)currentBlock, currentBlock->size);
- nextBlock = (void *)currentBlock + currentBlock->size;
- printf("nextblock %p nextblocksize%dn", nextBlock->back, currentBlock->size);
- if ((nextBlock->magicNumber == ALLOCATED_MAGIC_NUMBER || nextBlock->magicNumber == FREE_MAGIC_NUMBER)
- && (*nextBlock->footerSize <= 0))
- return (0);
- // printf("header : %d footer : %dn", nextBlock->size, *nextBlock->footerSize);
- currentBlock->size += nextBlock->size;
- printf("mergeTop %dn", currentBlock->size);
- nextBlock->magicNumber = 0;
- nextBlock->back->next = nextBlock->next;
- printf("sbrk 0 %p nextblock %pn", sbrk(0), nextBlock->next);
- nextBlock->next->back = nextBlock->back;
- printf("endn");
- return (1);
- }
- return (0);
- }
- currentBlock 0x5568618517a8
- size 136
- nextblock 0x7fe05cd9af48 nextblocksize136
- mergeTop 136
- sbrk 0 0x55686188d090 nextblock 0x3c1
- Segmentation fault (core dumped)
- previousBlock = checkMergeTop(freeBlock);
- if (previousBlock != NULL)
- {
- // checkMergeBot(previousBlock);
- // previousBlock->footerSize = (void *)(previousBlock) + previousBlock->size - (int)sizeof(int);
- // *previousBlock->footerSize = previousBlock->size;
- // if (previousBlock->size > getpagesize() && (void *)previousBlock + previousBlock->size == sbrk(0))
- // {
- // // printf("decrease sizen");
- // sbrk((int)previousBlock->size * -1);
- // }
- }
- else
- {
- checkMergeBot(freeBlock);
- // printf("add to free list %dn", freeBlock->size);
- hashedSize = hashSize(freeBlock->size) - 1;
- if (hashedSize < 0)
- hashedSize = 0;
- addToFreeList(freeBlock, hashedSize);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement