c++ - 在 C++ 中返回后更改返回指针

标签 c++ pointers

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

相关文章:

c++ - 替换循环以计算符合条件的元素数

pointers - 在子例程中分配数组并将其传回时,FORTRAN 中的内存泄漏问题

c++ - "...."的原型(prototype)与类 "..."中的任何一个都不匹配

c++ - 给定数字 N 消除 K 数字以获得最大可能数字

python - 如何在 VTK 中创建颜色图?

c++ - new 必须用于创建结构?

c - *(int*) a - 有人可以解释一下吗

c - If 语句中的多指针测试

C++:删除指针数组时出错

c - 在 C 中传递给函数 arg 时结构指针和结构之间的区别