I'm trying to write simple memory manager. I have a test file with following asserts:
VA page_1 = NULL;
void* pBuffer_1 = "0123";
size_t szBuffer_1 = sizeof("0123");
//right execution
assert(_write(page_1, pBuffer_1, szBuffer_1) == 0);
//assert pointer value
assert(*page_1 == pBuffer_1);
and _write()
function:
int _write(VA ptr, void* pBuffer, size_t szBuffer)
{
if (pBuffer == NULL) return -1;
if (szBuffer < 1) return -1;
if (szBuffer > MMEM.page_size - MMEM.table[MMEM.pages_filled].filled_bytes)
return -2;
memcpy(&MMEM.table[MMEM.pages_filled].data, pBuffer, szBuffer);
ptr = &MMEM.table[MMEM.pages_filled];
if (ptr == NULL) return 1;
MMEM.table[MMEM.pages_filled].filled_bytes += szBuffer;
MMEM.pages_filled++;
return 0;
}
The problem is the second assert()
don't pass because of page_1 == NULL
. In debug before ptr = &MMEM.table[MMEM.pages_filled];
ptr
is NULL
and after ptr 0x00fe5568 '0123'
. Why inside thу function it works but out of it my pointer is NULL
?