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

时间:2018-05-30 16:16:24

标签: 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。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

以下是当前语法的用法(跳过一些不相关的步骤):

  1. 创建一个指针数组(这些指针最初是垃圾)
  2. 为第一个指针指向的对象赋值(但由于指针包含垃圾,因此取消引用它是一种访问冲突)
  3. 您缺少为指针指定有效值的步骤。如果意图指向siteCloud,Killzone Kid的答案是可行的方法(ptrTest[0] = &siteCloud; 我不会主张使用双下划线)。如果目的是将值从siteCloud复制到数组元素指向的对象,则需要首先创建该对象(类似ptrTest[0] = new EstablishmentCloud_site)。

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

答案 1 :(得分:0)

在你的帮助下,我设法创建了这个功能。我希望它不是那么糟糕的代码!谢谢!

establishmentConversion(mySourceObject establishmentSource)
{
    EstablishmentCloud__establishment       establishmentCloud;

    [...]

    establishmentCloud.site_list = new EstablishmentCloudcloud_siteArray;
    establishmentCloud.site_list->__ptr = new EstablishmentCloud__cloud_site *;
    for(int i=0; i<(*(establishmentSource.site_list)).__size; i++)
    {
        establishmentCloud.site_list->__ptr[i] = new EstablishmentCloud__cloud_site;
        establishmentCloud.site_list->__ptr[i]->f_site_id=(*((*(establishmentSource.site_list)).__ptr[i])).f_site_id;
        establishmentCloud.site_list->__ptr[i]->f_status=(*((*(establishmentSource.site_list)).__ptr[i])).f_status;
        establishmentCloud.site_list->__ptr[i]->f_name=(*((*(establishmentSource.site_list)).__ptr[i])).f_name;
    }

    return establishmentCloud;
}