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.