在一个应用程序中,我遇到了这样一个问题。该方法旨在为用户提供从全局内存池中获取内存的通用接口,实现如下:
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
你的问题与内存对齐无关。你的代码有一些问题,所以请对我的回答持保留态度:
- 为什么要将对象转换为
void*
?这几乎肯定是不好的。 - 我同意@Björn Pollex的观点,在这个例子中最好使用返回值而不是out参数。
mPtr
为局部变量。只更改了本地副本—为什么要更改其他变量呢?如果你想改变一个不同的指针,你必须接受一个指向它的引用或指针。