Динамически выделять память для массива в отдельной функции std :: bad_alloc получил - PullRequest
0 голосов
/ 01 марта 2019

Прежде всего я знаю, что могу использовать std::vector вместо arrays, но я хочу использовать массивы, потому что я хочу понять, как можно выделить память вне области объявления.

Я хочучтобы передать массив common_words в функцию, и в этой функции я хочу выделить немного памяти.

Когда я запускаю свой код, я получаю следующее:

завершение вызова после бросания экземпляра'std :: bad_alloc'
что (): 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 голосов
/ 01 марта 2019

Редактировать .... Итак, вот пример и изображение вроде того, что происходит в памяти.

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

Итак, строка за строкой.Определите массив и укажите его аргументы.Для этого у нас будет размер массива.int size Далее нам нужно создать ячейку памяти и дать ей указатель.int *ptrArray = new int[size] Далее мы хотим вернуть значение нашего указателя, поэтому в основном адрес, на который он указывает.return ptrArray Обратите внимание, что когда мы определяем массив, мы делаем int *, чтобы сообщить ему, что мы будем возвращать значение указателя.И вот как просто супер img того, как это выглядит в памятине актуально.

...