簡體   English   中英

C ++:動態初始化雙指針

[英]C++: Dynamic initialization of 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復制到array元素指向的對象,則需要首先創建該對象(類似ptrTest[0] = new EstablishmentCloud_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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM