【问题标题】:Assigning dynamically allocated array of pointers分配动态分配的指针数组
【发布时间】:2013-10-29 23:24:53
【问题描述】:

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

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);

【问题讨论】:

  • 请考虑使用矢量。
  • 为什么不使用vector&lt;string&gt; ?不要自己管理内存。

标签: c++ arrays pointers dynamic-allocation


【解决方案1】:
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&lt;std::string&gt; 及其构造函数,它与您的函数执行相同的操作(只是以更安全、更合理的方式,没有可能的内存泄漏):

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

【讨论】:

  • 好的,我明白你在说什么,我已经解决了这个问题,不幸的是它在 27 次中有 2 次后仍然崩溃。
【解决方案2】:

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

dynamString[i] = &ptrArray[i];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2013-05-26
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多