查宁在C++返回后返回了指针
Chaning returned pointer after it's been returned in C++
我在这个函数中返回一个指向内存块的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对象在内存中?)
是的,你可以随时改变指针指向别的东西。
然而,这只会改变你所赋值的指针,而不会改变其他使用旧指针的地方。因此,如果某些代码保存了allocate
函数的返回值,而您稍后将pointers[0]
更改为指向其他内容,则旧的保存指针将不会更改。
相关文章:
- 在函数中返回无符号字符数组,但不返回指针
- 为什么需要返回指针来利用协方差?
- 野牛如何在解析树中返回指针
- 何时返回指针与返回对象的一般经验法则?
- 为什么使用 std::istream_iterator 构造函数返回指针
- 为什么我不能直接从返回指针的函数返回对指针的引用?
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 为什么下面的代码段返回指针指向的值而不是指针的地址?
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- 如何从类成员函数返回指针,例如 size_t * class :: function(); 并使用类析构函数 ~size
- 函数返回动态强制转换的指针,返回指针,就好像它根本没有被转换一样
- 从函数返回对指针的引用与返回指针相同?
- C++ 为什么访问数组中的元素会返回指针?
- 关于函数返回指针
- 返回指针或对私有成员的引用的替代方法
- 从函数返回指针
- 通过从当地的C风格阵列中返回指针来获取一个悬空的指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 为什么C 模板功能不支持返回指针
- 返回指针的语句 - 解释它是如何工作的以及为什么