<分区>
我正在尝试编写简单的内存管理器。我有一个包含以下断言的测试文件:
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'
。为什么在函数内部它可以工作,但在函数外部我的指针是 NULL
?