在C ++中返回后返回返回指针

时间:2013-04-08 05:48:13

标签: c++ pointers

我在这个函数中返回一个指向内存块的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]。 如果不改变分配函数的原型就可以吗?

由于

2 个答案:

答案 0 :(得分:1)

是的,您可以随时更改指向其他内容的指针。

但是,这只会更改您指定的指针,而不会更改使用旧指针的其他位置。因此,如果某些代码保存了allocate函数中返回的值,并且您稍后将pointers[0]更改为指向其他内容,则旧保存的指针不会更改。

答案 1 :(得分:1)

不,你不能。您需要返回一个指向指针(void**),并使allocate函数的客户端绝对清楚它们不允许它们为内存创建别名。无论如何,这是一个非常坏主意,你会遇到左右问题(例如,如果你的客户使用就地new来分配非POD对象,那该怎么办?记忆?)