Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:双指针的动态初始化_C++_Dynamic_Initialization_Double Pointer - Fatal编程技术网

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

C++ C++;:双指针的动态初始化,c++,dynamic,initialization,double-pointer,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])=siteC

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

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;
似乎初始化u ptrTest是错误的,因为我得到了一个“访问冲突读取位置”。好的语法是什么

当然,在最后,这段代码将在一个循环中,在my uuu ptrTest中插入几个EnterprisementCloud_站点


谢谢

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

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

  • 创建一个指针数组(这些指针最初是垃圾)
  • 为这些指针中的第一个指针指向的对象指定一个值(但由于指针包含垃圾,取消引用它是一种访问冲突)
  • 缺少为指针指定有效值的步骤。如果目的是指向
    siteCloud
    ,Killzone Kid的答案是正确的(
    ptrTest[0]=&siteCloud;
    我不主张使用双下划线)。如果目的是将值从
    siteCloud
    复制到数组元素指向的对象,则需要首先创建该对象(类似于
    ptrTest[0]=new-estmentcloud\u site


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

    在您的帮助下,我成功地创建了此函数。我希望这不是那么糟糕的代码!谢谢

    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;
    }
    
    establishmentConversion(mySourceObject establishmentSource)
    {
    企业云\企业云;
    [...]
    establishmentCloud.site_list=新建establishmentCloud_siteArray;
    场所列表->\uuuPTR=新场所云\uuuuuu云\uu场所*;
    对于(int i=0;i_uuuptr[i]=新成立的云计算站点;
    场所列表->\uuuu ptr[i]->f\u场所id=(*((*(场所源.场所列表))。\uu ptr[i])。f\u场所id;
    场所列表->场所列表[i]->场所状态=(*((*(场所源.场所列表))。(场所列表[i])。场所状态;
    场所列表->\uuuu ptr[i]->f_名称=(*((*(场所源.场所列表))。\uu ptr[i])。f_名称;
    }
    回归建立云;
    }
    
    您必须使用双指针吗?
    std::vector
    使用起来更简单、更安全。请不要将它们视为“双指针”-它们是“指向指针的指针”。您需要使用指向指针类型的指针吗?如果不需要,请不要使用该路径。此外,您可以删除
    [1]
    \uuuu ptrTest=new-estmentcloud\u site*[1];
    中。如果大小仅为1,则无需指定大小。如果“我的\uu ptrTest中有多个场所cloud\u site”,则需要分配那么多的指针,例如
    \uu ptrTest=new-estmentcloud\u site*[number]
    并且每个指针都需要指向足够的已分配存储空间,以容纳每个
    企业云站点
    ,例如,
    \uu ptrTest[x]=新企业云站点;
    。感谢您的回复,这非常有用