Программа выдаёт ошибку: "std::bad_alloc"

Функция res() должна на вход принимать указатель на строку и возращать вектор с типом строки с размером длины передаваемой строки, а каждый элемент в векторе должен соответственно равен каждому символу строки.

Проблема: При запуске программа выдаёт следующую ошибку:

terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc


#include <iostream>
#include <string>
#include <vector>
#include <iterator>

using namespace std;

vector<string> res(string *p) {
    vector<string> vres;
    vres.reserve(p->size());
    for (int i = 0; i < p->size();++i) {
        vres.push_back(p[i]);
    }
    return vres;
}

int main(int argc, char* argv[])
{
    string word = "Hello";
    string * pword = &word;

    vector<string>result = res(pword);
    copy(result.begin(), result.end(), ostream_iterator<string>(cout, " "));

    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Стоп-стоп!

p->size() 

даст вам размер строки, а именно - 5. А дальше вы пытаетесь обращаться к несуществующим строкам p[i] (рассматривая p как массив строк, который на самом деле является просто указателем на одну строку) - есть ведь реально только одна строка - p[0], а остальное - указатели не пойми куда!

Если вы поясните, что вы *хотели**, будет можно посоветовать, как это сделать...

Если уж позарез именно вектор строк - то вот так лучше:

vector<string> res(const string& p) {
    vector<string> vres;
    vres.reserve(p.size());
    for(auto c: p) vres.emplace_back(1,с);
    return vres;
}

Только вот то же результат легко получить без вектора вообще:

int main()
{
    string word = "Hello";
    copy(word.begin(), word.end(), ostream_iterator<char>(cout, " "));
    return 0;
}
→ Ссылка