1

我们正在开展一个项目,该项目需要我们用 C++ 制作和管理堆。我们正在使用一个字符数组来存储我们的内存(在项目中没有使用“new”)。我们有一个分配函数,它需要返回一个类型为 T 的指针。我们有几个类型定义和一个模板来帮助我们

template <typename T>
typedef T    value_type;
typedef value_type*  pointer;

所以我们需要返回一个“指针”。问题:

我们如何返回一个指向字符数组中某个索引的“指针”?

假设分配的块的开头指向地址 5,并且类型名 T 是 int。我们如何创建一个指向数组索引 5 的 int 指针(使用我们的“指针”)?

我们尝试使用reinterpret_cast <pointer> (a[index])将数组索引转换为指针。此外,我们尝试reinterpret_cast <pointer> (a + index)获取数组指针,将其按索引向上移动,并将其转换为我们的类型指针。每次,指针都指向“0xfffffffffff”之类的东西或一堆f,后面可能跟着一个0c或一些随机值,因此一旦我们稍后在程序中取消引用它(例如在构造函数中),就会导致分段错误。

谢谢!

编辑数组“a”是我们的字符数组

4

1 回答 1

0

我想我们想通了。我们有:

reinterpret_cast <pointer> (a[index])

这会给我们数组索引的指针(基本上是一个值的指针,不是一个值的指针)。

我们将其更改为

reinterpret_cast <pointer> (&a[index])

这会给我们一个指向数组索引的指针(基本上是指向的指针,而不是值指针)。对不起,如果这种巧妙地使用“of”和“to”并没有起到作用。我想这之间的区别

int a = 5

int* k = &a

对比

int* k = a //even though this wouldnt compile

于 2012-10-10T03:10:22.203 回答