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 的初始化是错误的,因为我得到了 "Access violation reading location"。什么是好的语法?
当然,最后这段代码会循环插入几个EstablishmentCloud_site到我的__ptrTest.
谢谢!
要使用的语法取决于您要完成的任务。目前还不清楚是语法错误还是逻辑错误
这是当前语法要求执行的操作(跳过一些不相关的步骤):
- 创建一个指针数组(这些指针最初是垃圾)。
- 为第一个指针指向的对象赋值(但由于指针包含垃圾,取消引用它是访问冲突).
您错过了为指针分配有效值的步骤。如果意图是指向 siteCloud
,Killzone Kid 的答案就是要走的路(ptrTest[0] = &siteCloud;
我不打算提倡使用双下划线 )。如果目的是将值从 siteCloud
复制到数组元素指向的对象,则需要先创建该对象(类似于 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;
}
如果您能帮助我初始化双指针,我将不胜感激。这是我的代码:
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 的初始化是错误的,因为我得到了 "Access violation reading location"。什么是好的语法?
当然,最后这段代码会循环插入几个EstablishmentCloud_site到我的__ptrTest.
谢谢!
要使用的语法取决于您要完成的任务。目前还不清楚是语法错误还是逻辑错误
这是当前语法要求执行的操作(跳过一些不相关的步骤):
- 创建一个指针数组(这些指针最初是垃圾)。
- 为第一个指针指向的对象赋值(但由于指针包含垃圾,取消引用它是访问冲突).
您错过了为指针分配有效值的步骤。如果意图是指向 siteCloud
,Killzone Kid 的答案就是要走的路(ptrTest[0] = &siteCloud;
我不打算提倡使用双下划线 )。如果目的是将值从 siteCloud
复制到数组元素指向的对象,则需要先创建该对象(类似于 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;
}