C++:双指针的动态初始化

标签 c++ dynamic initialization double-pointer

如果您能帮助我初始化双指针,我将不胜感激。这是我的代码:

EstablishmentCloud_site **__ptrTest;
EstablishmentCloud_site siteCloud;

__ptrTest = new EstablishmentCloud_site *[1];
siteCloud.f_site_id="site";
siteCloud.f_status="status";
siteCloud.f_name="name";
*(__ptrTest[0])=siteCloud;

似乎 __ptrTest 的初始化是错误的,因为我得到了“访问冲突读取位置”。什么是好的语法?

当然,最后这段代码会循环往我的__ptrTest中插入几个EstablishmentCloud_site。

谢谢!

最佳答案

要使用的语法取决于您要完成的任务。目前尚不清楚是语法错误还是逻辑错误。

这是当前语法要求执行的操作(跳过一些不相关的步骤):

  1. 创建一个指针数组(这些指针最初是垃圾)
  2. 为第一个指针指向的对象赋值(但由于指针包含垃圾,取消引用它是访问冲突)

您错过了为指针分配有效值的步骤。如果目的是指向 siteCloud,Killzone Kid 的答案就是要走的路(ptrTest[0] = &siteCloud; 我不提倡使用双下划线)。如果目的是将值从 siteCloud 复制到数组元素指向的对象,则需要先创建该对象(类似于 ptrTest[0] = new EstablishmentCloud_site).

如果对象没有足够长的生命周期,前一种方法(分配地址)可能会遇到问题。如果您之后没有充分清理,后一种方法(更多分配)可能会遇到内存泄漏。如果这些中的任何一个是您所处情况的问题,您可能需要重新考虑您是否真的需要一个指针数组。 (您可能会发现有一些标准模板可以使您的实现更容易。)

关于C++:双指针的动态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50609330/

相关文章:

c++ - 传递模板供以后在其他结构/类上下文中使用

Scala - 动态对象/类加载

c - 未初始化的值是由堆栈分配创建的 - 无法找到我出错的地方

java - Java中对象数组的初始化

C# 有没有办法动态地从序列化中排除成员?

apache-spark - Dataproc 如何仅在主节点上运行初始化操作脚本并跳过在工作节​​点上运行

c++ - 具有类作用域的动态分配堆栈内存

c++ - 如何判断驱动器的类型?

c++ - 是否需要释放/释放 GL_TEXTURE?

c++ - 动态类型取消引用?