我在此函数中返回指向内存中块的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/

10-11 19:42