Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стираются данные в векторе 
V
    Опции темы
olla
Дата 11.2.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.2.2009

Репутация: нет
Всего: нет



Привет!
Два дня не могу отладить кусок элементарной программы, уже как только не пробовала...Где же я ошибаюсь?


Код

vector <char*> slova; char* slovo;  
slova.reserve(10);
 int maxsizer=0;
 clrscr();
while(strcmp(slovo,"klop"))
{
maxsizer++;
if(maxsizer==slova.size()){slova.reserve(10);}
cin>>slovo;
slova.push_back(slovo);
};
for(vector<char*>::iterator vxd=slova.begin();vxd!=slova.end();vxd++)cout<<*vxd<<endl;
 



В результате: внутри цикла вектор заполняется, если смотреть через итератор данные появляются на своих местах,размер вектора увеличивается, но когда проверяю распечаткой через цикл for выдает только maxsizer значений  последнего введенного слова,  просмотр через итератор показывает, что все позиции в векторе заняты этим словом...Куда делись все остальные данные?
PM MAIL   Вверх
mes
Дата 11.2.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(olla @  11.2.2009,  15:04 Найти цитируемый пост)
vector <char*> 

Вы храните указатель на строку и все время запихиваете в вектор значение адресса одной и той же переменной.
так что ничего удивительного в Вашем результате нет. smile

Вобщем замените char*  на string  smile 

Это сообщение отредактировал(а) mes - 11.2.2009, 16:22


--------------------
PM MAIL WWW   Вверх
olla
Дата 11.2.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.2.2009

Репутация: нет
Всего: нет



Т.е. reserve выделяет память под 10 указателей на символы, а под сами символы нет? Получается push_back помещает в вектор копию указателя на слово, а не копию самого слова. В результате цикла while в векторе maxsizer копий одного и того же указателя на символы, поэтому выдает белеберду...
Спасибо,что подтолкнули в нужном направлении!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.