如何将地址对齐到一个void指针



在一个应用程序中,我遇到了这样一个问题。该方法旨在为用户提供从全局内存池中获取内存的通用接口,实现如下:

shmPool shm;
void getMemory(void* mPtr){
   mPtr = &shm;
}

,但很明显mPtr的值没有改变。如何将指针的值与未知类型指针对齐

为什么不直接返回指针,而不是使用输出参数?

void* getMemory() {
    return &shm;
}

这是你的代码,修改后的调用者将收到指向shm的指针:

shmPool shm;
void getMemory(void** mPtr){
   *mPtr = &shm;
}

调用者将像这样调用这个函数:

shmPool* p;
getMemory(&p);
// now p is a valid pointer

你的问题与内存对齐无关。你的代码有一些问题,所以请对我的回答持保留态度:

  1. 为什么要将对象转换为void* ?这几乎肯定是不好的。
  2. 我同意@Björn Pollex的观点,在这个例子中最好使用返回值而不是out参数。

mPtr为局部变量。只更改了本地副本—为什么要更改其他变量呢?如果你想改变一个不同的指针,你必须接受一个指向它的引用或指针。

最新更新