1

I have the following piece of code which allocates some memory.

Some used initialisations:

#define MEM_POOL_SIZE 600

typedef struct {
size size;
mem_status status;
} mem_chunk_header;

unsigned char* ptr;

When I call this function as follows

ma_malloc(600)

it should return NULL. But I get a segmentation fault: 11. I tried using GDB, but then I run into different problems...

void* ma_malloc(size tsize)
{
    mem_chunk_header header;

    unsigned char* searchPtr = ptr;
    int oldSize = 0;
    int stop = 0;

    while(((searchPtr-ptr)/sizeof(unsigned char) < MEM_POOL_SIZE) && (stop >= 0))
    {
            if((*searchPtr = 0xFF) && ((getSize(searchPtr) >= (tsize))))
            {
                    stop = -1;
            }
            else
            {
                    if(getSize(searchPtr) == 0)
                    {
                            return NULL;
                    }
                    else
                    {
                            searchPtr += (getSize(searchPtr)+header.size);
                    }
            }
    }
    if(stop == 0)
    {
            printf("%s\n","No free space available");
            return NULL;
    }
    else
    {
            oldSize = getSize(searchPtr);
            //Update header
            *searchPtr = 0xAA;
            *(searchPtr+1) = (unsigned char) ((tsize)/256);
            *(searchPtr+2) = (unsigned char) ((tsize)%256);
            //Update footer
            updateFooter(searchPtr);
            //New overhead
            unsigned char* newPtr = (searchPtr+(getSize(searchPtr))+header.size);
            unsigned char* nextPtr = (unsigned char*) (searchPtr+oldSize+header.size);
            int leftoverSize = ((nextPtr-newPtr)/sizeof(unsigned char));

            if(leftoverSize == 0)
            {
                    //Do nothing
            }
            else
            if(leftoverSize <= header.size)
            {
                    unsigned int tempSize = getSize(searchPtr) + leftoverSize;
                    //Update header
                    *(searchPtr+1) = (unsigned char) (tempSize/256);
                    *(searchPtr+2) = (tempSize%256);
                    //footer
                    updateFooter(searchPtr);
            }
    else
            {
                    //Update header
                    *newPtr = 0xFF;
                    *(newPtr+1) = (unsigned char) ((leftoverSize-header.size)/256);
                    *(newPtr+2) = (unsigned char) ((leftoverSize-header.size)%256);
                    //Update footer
                    updateFooter(newPtr);
            }
    }
    return searchPtr;
}

I've been looking at this for a while now, but I can't see why it is giving me this error.

Yannick Maris
  • 329
  • 1
  • 4
  • 16

0 Answers0