繁体   English   中英

分配动态分配的指针数组

[英]Assigning dynamically allocated array of pointers

在这里浏览许多帖子后,遇到了很多麻烦。 一切都可以编译,但是在此函数执行期间我立即崩溃,该函数应该将一个数组的地址动态分配给该指针数组。 我看到发布了一个或两个内存地址,所以我不确定为什么在此过程中它会崩溃。

string *copyArray(string ptrArray[],int sizeArray)
   {
    string **dynamString = new string*[sizeArray];
    int i;

    for (i=0;i<=sizeArray;++i)
        {
         (*dynamString[i]) = ptrArray[i];
         cout << dynamString[i];
        }
    return *dynamString;

}

从主要我有:

string *arrPtr;

和函数调用

arrPtr = copyArray(arrayOfStrings, arraySize);
for (i=0;i<=sizeArray;++i)

访问数组后面的元素,产生未定义的行为 元素的索引从0sizeArray - 1 另一个问题是您分配了指针数组:

string **dynamString = new string*[sizeArray];

然后您取消引用这些指针,尽管它们还没有指向任何对象:

(*dynamString[i]) = ptrArray[i];

这也会导致不确定的行为 如果要创建深层副本,则还应该为每个对象分配内存:

for (i = 0; i < sizeArray; ++i)
{
    dynamString[i] = new std::string(ptrArray[i]);
    cout << *dynamString[i];
}

但是,应尽可能避免使用C型数组,而应首选STL容器。 在这种情况下,可能是整齐的std::vector<std::string>及其构造函数,其作用与您的函数相同(只是以更安全,更合理的方式进行,没有可能的内存泄漏):

std::vector<std::string> myStrings(arrayOfStrings, arrayOfStrings + arraySize);

好的,我在这里固定了。 我的指针语法不正确。 这是正确的语法。

dynamString[i] = &ptrArray[i];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM