【问题标题】:allocating memory on the free store在空闲存储上分配内存
【发布时间】:2014-11-24 08:40:46
【问题描述】:

当我在 C++ 中编写代码以在空闲存储上分配内存时,我很好奇为该数据分配一个指针。例如:

当我像这样声明和初始化一个指针时,

     unsigned short int * pPointer = new unsigned short int;
     *pPointer = value;
     delete pPointer;

是 4 个字节;使用 new 关键字在免费存储上分配,我可以为该地址分配一个值。但我的问题是,为什么我需要重新建立它的类型才能分配我的指针?

我想做: 无符号短整数 * pPointer = 新 pPointer
容易吗?

Javascript 会使用方法

     newMethod = new Method()

在方法中访问成员数据。

但我知道如何使用指针。

      pPointer = member data address   and   *pPointer = member data value  

每次我尝试类似的东西,

    int * pLocal = &pPointer   

抛出错误。无法将 int** 转换为 int* 试图保留相同的内存空间,这就是为什么我不能将它的地址存储在另一个指针中,它只是保留的内存。

对不起,如果这令人困惑,但我只是想知道如何在空闲存储上分配内存并使用指针访问它已经具有 sizeof() 内存默认的类型需要在 new 关键字之后进行另一个类型声明?

【问题讨论】:

  • pPointer 是一个int*(指向int 的指针)。 &pPointerpPointer 的地址,类型为int**(指向int 的指针的指针),它与int* 不同,这就是您收到该错误的原因。跨度>
  • 我理解的更清楚了。谢谢您的评论。

标签: c++ pointers memory


【解决方案1】:

但我的问题是,为什么我需要重新建立它的类型才能分配我的指针?

当您使用new 进行分配时,您需要提供类型。这是因为编译器不知道你在分配什么,它需要类型以便在给定特定信息(即类型有多少字节、对齐方式等)的情况下为该特定类型建立正确的分配策略。

请注意,类型并不总是与指针相同。例如,如果您有一个基类B 和一个派生类D,则可以将基类指针分配给派生类实例的地址(即B* ptr = new D)。

Javascript 会使用方法

newMethod = new Method()

JavaScript 没有指针,new 在该语言中的工作方式不同。它只是创建给定类(函数)的一个新实例。

【讨论】:

  • 我知道它做了什么,因为您的评论是编译器不知道我正在分配什么,例如数据需要提供给编译器以正确分配数据的特定类型。谢谢你,这有帮助。
猜你喜欢
  • 2011-07-26
  • 2011-07-13
  • 2015-03-21
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2020-02-03
  • 2014-12-13
相关资源
最近更新 更多