c - 我传递了一个指向该函数的指针,但没有任何内容写入其地址

标签 c pointers reference

<分区>

我正在尝试编写简单的内存管理器。我有一个包含以下断言的测试文件:

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]; ptrNULL 之后 ptr 0x00fe5568 '0123'。为什么在函数内部它可以工作,但在函数外部我的指针是 NULL

最佳答案

该函数处理指针 page_1 的副本。函数参数是它的局部变量。因此,函数内副本的任何更改都不会影响原始指针的值。

如果您想在函数内更改指针的原始值,则通过指向该指针的指针按引用传递它。我假设代码是 C 代码。

int _write(VA *ptr, void* pBuffer, size_t szBuffer);

否则将参数声明为具有引用类型。

int _write(VA &ptr, void* pBuffer, size_t szBuffer);

关于c - 我传递了一个指向该函数的指针,但没有任何内容写入其地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745384/

相关文章:

c++ - std::list::sort 和指向元素的指针

使用堆栈的 C/C++ 算术表达式求值

C - 当生产者大于缓冲区大小时,消费者/生产者出现死锁

c - 带有指向字符数组指针的 strcpy 函数

c++ - 使用指针重新复制字符数组并修剪前导空格

javascript - 访问对象内的对象时出现问题(对于 for 循环)

c++ - 调用free()时混合语言程序崩溃

c - 不安全的转换

c - 通过二叉树搜索段错误

c++ - 将 const 结构引用转换为非常量指针