Программа выдаёт ошибку: "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 шт):
Стоп-стоп!
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;
}