在收到的单独函数std :: bad_alloc中为数组动态分配内存

时间:2019-03-01 17:27:58

标签: c++ arrays dynamic-memory-allocation

首先,我知道我可以使用std::vector而不是arrays,但是我想使用数组,因为我想了解如何在声明范围之外分配内存。

我想将common_words数组传递给一个函数,然后在该函数中分配一些内存。

运行代码时,我收到以下消息:

  抛出'std :: bad_alloc'实例后调用

terminate
  what():std :: bad_alloc

代码如下:

void allocSpace(std::string *&common_words, int words_k)
{
     common_words = new std::string[words_k];   
}

int main(void)
{
    int words_k = 0, comma_k = 0;
    std::string *common_words;

    std::cout << "Enter the words to be ignored separated by \',\': " << std::endl;
    std::getline(std::cin, words_list);

    comma_k = getCommaNumber(words_list); // returns 2 (const int value)
    words_k = comma_k + 1;

    allocSpace(common_words, words_k);

    return 0;
}

谢谢!

1 个答案:

答案 0 :(得分:-2)

编辑。...这是一个示例,有点像内存中发生的情况。

int* allocateArray(int size){
    int *ptrArray = new int[size];
    return ptrArray;

所以一行一行。定义数组并放入其参数。为此,我们将获得数组的大小。 int size接下来,我们需要创建内存位置并为其指定一个指针。 int *ptrArray = new int[size]接下来,我们要返回指针的值,因此基本上也指向它指向的地址。 return ptrArray请注意,当我们定义数组时,我们如何做int *以便让我们知道我们将返回指针的值。这是内存中看起来像的超级简单的img enter image description here

我还删除了之前说过的内容,我说过不要将其设为超长篇幅,也因为它不相关。