0

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

现在说我想让这个函数的用户使用内存数组的不同位置,而不通知分配函数的用户(假设我们丢失数据没问题)。

我不能这样做吗?

内存.cpp:

pointers[0] = &mem[200];

在 memory.cpp 中执行此行后,我想arr[0]指向mem[200]. 在不改变分配函数原型的情况下这可能吗?

谢谢

4

2 回答 2

1

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

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

于 2013-04-08T05:54:34.687 回答
1

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

于 2013-04-08T05:55:16.433 回答