我正在尝试编写简单的内存管理器。我有一个包含以下断言的测试文件:
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);
和_write()
函数:
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;
}
问题是第二个assert()
由于page_1 == NULL
而没有通过。在ptr = &MMEM.table[MMEM.pages_filled];
之前ptr
和NULL
之后的调试中。为什么在函数内可以起作用,但指针却是ptr 0x00fe5568 '0123'
?