我在此函数中返回指向内存中块的void *指针:
memory.cpp:
int mem[1000];
int* pointers[100];
int start_index = 100;
void* allocate(int size) {
pointers[0] = &mem[start_index];
return (void *) pointers[0];
}
main.cpp:
int* arr = (int*) allocate(50); // allocate array of size 50 starting at mem[100]
arr[0] = 62; // changes mem[100] to 62
现在说我想让此函数的用户使用mem数组的不同位置,而无需通知分配函数的用户(假设丢失数据不会有问题)。
我不能这样做吗?
memory.cpp:
pointers[0] = &mem[200];
在memory.cpp中执行此行之后,我要
arr[0]
指向mem[200]
。在不更改分配功能原型的情况下是否有可能?
谢谢
最佳答案
不,你不能。您将需要返回一个指向指针的指针(void**
),并向allocate
函数的客户端明确表明不允许它们为内存创建别名。无论如何,这是一个非常糟糕的主意,您会左右左右碰到问题(例如,如果客户端使用就地new
在该内存中分配非POD对象该怎么办?)
关于c++ - 在C++中返回后更改返回指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15872079/