2013-09-08 2 views
0

При запуске этой программы:время выполнения ошибка при изменении размера вектора

#include <iostream> 
#include <vector> 
using namespace std; 


int main() 
{ 
    vector<vector<char> > screen; 
    char ch = 'a'; 
    unsigned col = 100, row = 100; 
    if(screen.size() < (unsigned)row) 
     screen.resize(row); 
    if(screen[row - 1].size() < (unsigned)col) 
     screen[row - 1].resize(col); 
    screen[9][9] = ch; 
    cout<< "hello"; 
    cout.flush(); 
} 

cout ничего не печатать, и я получаю эту ошибку:

Segmentation Fault (core dumped) 

В Linux. Что-то не так в программе?

Если col и row имеют более низкие номера, проблем нет.

+0

Нулевое индексирование. Вектор 100x100 имеет по 100 элементов в каждом, от 0 до 99. – dwarduk

ответ

3
if(screen[row - 1].size() < (unsigned)col) 
    screen[row - 1].resize(col); 

Вы только изменяете размер screen[99] здесь. screen[9] все еще имеет размер 0, поэтому вы не можете получить доступ к screen[9][9] (вы могли бы получить доступ screen[99][9]).

+0

yep. Благодарю. это краткая выдержка из программы лагеря, которую я должен рассмотреть снова. – user2029077

3

Вы изменяете размер screen до row элементов, но затем вы получаете доступ к элементу row. vector s в C++, как и массивы, основаны на 0, поэтому действительными индексами являются 0...row-1.

То же самое касается внутренних векторов и col.

Тот факт, что он работает для меньших чисел, является (неудачной) неудачей.

+0

Я изменил индекс перед публикацией. Теперь это исправлено, и проблема не решена. – user2029077