EXC_BAD_ACCESS при установке подстроки строки в элемент char вектора (C ++) - PullRequest
1 голос
/ 07 августа 2011

Я пытаюсь сделать заголовок расширенным вектором. Одна из функций устанавливает вектор на вход консоли (cin). Используется следующий код:

vector<char> cveccin(){
    string cinval;
    cin>>cinval;
    vector<char> creader;
    for (int i=0; i<cinval.size(); i++) {
        creader[i]=cinval[i];
    }
    return creader;
}

Я использую эту функцию в тесте, и она дает мне EXC_BAD_ACCESS. Что здесь не так?

Ответы [ 3 ]

3 голосов
/ 07 августа 2011

Проблема в том, что ваш вектор имеет нулевой размер, и использование [] не сделает его больше.

Есть одна строка, которая делает то, что вы хотите.

vector<char> cveccin()
{
    string cinval;
    cin >> cinval;
    return vector<char>(cinval.begin(), cinval.end());
}

Этот код создает вектор правильного размера, копирует в него строку cinval и возвращает ее из функции, все в одной строке. Разве C ++ не изумителен!

3 голосов
/ 07 августа 2011

Если вы хотите добавить элементы в std :: vector, используйте

vector<char> creader;
creader.push_back( var );

Чтобы использовать нотацию массива, вам сначала нужно будет установить размер std :: vector

vector<char> creader;
creader.resize ( 10 );
creader[0] = var1;
creader[1] = var2;
1 голос
/ 07 августа 2011

Проблема в том, что созданный вами вектор-создатель пуст. Поскольку он не содержит элементов, вы не можете получить доступ или индексировать их. Чтобы решить эту проблему, вы можете, например, использовать метод push_back вместо индексации и присваивания.

...