[英]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。
謝謝!
使用的語法取決於您要完成的工作。 就目前而言,尚不清楚是否存在語法錯誤或邏輯錯誤。
這是當前語法要求執行的操作(跳過一些不相關的步驟):
您缺少為指針分配有效值的步驟。 如果目的是指向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.