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