我们正在开发一个项目,要求我们在C ++中创建和管理堆。我们使用字符数组来存储我们的内存(在项目中不使用“new”)。我们有一个需要返回类型为T的指针的分配函数。我们有几个类型的defs和一个模板来帮助我们
template <typename T>
typedef T value_type;
typedef value_type* pointer;
所以我们需要返回一个“指针”。问题是:
我们如何返回指向字符数组中某个索引的“指针”?
假设已分配块的起点指向地址5,并且typename T为int。我们如何使用指向5?
的数组索引的int指针(使用我们的“指针”)我们尝试使用reinterpret_cast <pointer> (a[index])
将数组索引转换为指针。另外,我们尝试reinterpret_cast <pointer> (a + index)
来获取数组指针,将其向上移动索引,然后将其强制转换为类型指针。每次,指针指向诸如“0xfffffffffff”之类的东西或者一堆f,其后跟可能是0c或一些随机值,因此一旦我们在程序中稍后取消引用它(例如在构造函数中)就会导致分段错误。
谢谢!
编辑数组“a”是我们的字符数组
答案 0 :(得分:0)
我想我们已经明白了。我们有:
reinterpret_cast <pointer> (a[index])
这将为我们提供数组索引的指针(基本上是指针 一个值,而不是指针到一个值)。
我们将其更改为
reinterpret_cast <pointer> (&a[index])
这会给我们一个指向数组索引的指针(基本上是一个指针到该值,而不是 该值)。对不起,如果这个微妙的使用“of”和“to”就没有了。我想这是
之间的区别 int a = 5
int* k = &a
VS
int* k = a //even though this wouldnt compile