Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема с Vector в c++ 6.0

6.6K
06 июля 2004 года
eXod
11 / / 06.07.2004
вот такая интересная проблема!=))
в функции делаю resize вектора. при первом вызове функции всё прекрасно работает... когда она вызывается во второй раз при попытке сделать опять resize (просто увеличиваю кол-во членов на один) выдаёт ошибку: Debug error!..... after Normal block (#72) at [адрес]...
3
06 июля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by eXod
вот такая интересная проблема!=))
в функции делаю resize вектора. при первом вызове функции всё прекрасно работает... когда она вызывается во второй раз при попытке сделать опять resize (просто увеличиваю кол-во членов на один) выдаёт ошибку: Debug error!..... after Normal block (#72) at [адрес]...



Код в студию.

7.9K
06 июля 2004 года
daevaorn
2 / / 05.07.2004
Цитата:
Originally posted by eXod
вот такая интересная проблема!=))
в функции делаю resize вектора. при первом вызове функции всё прекрасно работает... когда она вызывается во второй раз при попытке сделать опять resize (просто увеличиваю кол-во членов на один) выдаёт ошибку: Debug error!..... after Normal block (#72) at [адрес]...


А не пробовал использовать reserve()?

6.6K
06 июля 2004 года
eXod
11 / / 06.07.2004
Цитата:
Originally posted by Green


Код в студию.


 
Код:
#include <vector>
vector<int> PointVideo;
//............
bool Send(....){
    //.........
    PointVideo.resize(PointVideo.end()+1);//тут
                                         //ошибка
    PointVideo[PointVideo.end()]=....
    //.........
}

всё инициализируется...
при первом вызове Send - всё в порядке, увеличивает, добавляет...
Вызываем второй раз... ошибка...=((
Пришлось пользовать list
6.6K
06 июля 2004 года
eXod
11 / / 06.07.2004
Цитата:
Originally posted by daevaorn

А не пробовал использовать reserve()?


Когда в первый раз вызывается, то добавляет сколько угодно, проверял... тем и бесит эта ошибка

3
06 июля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by eXod

 
Код:
#include <vector>
vector<int> PointVideo;
//............
bool Send(....){
    //.........
    PointVideo.resize(PointVideo.end()+1);//тут
                                         //ошибка
    PointVideo[PointVideo.end()]=....
    //.........
}

всё инициализируется...
при первом вызове Send - всё в порядке, увеличивает, добавляет...
Вызываем второй раз... ошибка...=((
Пришлось пользовать list



Уморил... :D
Ты посмотри в документации, что возвращает end() и что надо передать в resize().

6.6K
06 июля 2004 года
eXod
11 / / 06.07.2004
Цитата:
Originally posted by Green


Уморил... :D
Ты посмотри в документации, что возвращает end() и что надо передать в resize().


=)))))
Мда, надо следить за тем что пишешь...=))
Воть. Просто к инету у меня бук подключён, а код на другом компе(нет в сетки), ошибочка вышла...
#include <vector>
vector<int> PointVideo;
//............
bool Send(....){
//.........
PointVideo.resize(i+1);//тут
//ошибка
PointVideo[PointVideo.end()]=....
//.........
}
где i-предыдуший размер...
ещё раз сорри за введение в заблуждение

6.6K
06 июля 2004 года
eXod
11 / / 06.07.2004
Цитата:
Originally posted by Green


Уморил... :D
Ты посмотри в документации, что возвращает end() и что надо передать в resize().


=)))))
Мда, надо следить за тем что пишешь...=))
Воть. Просто к инету у меня бук подключён, а код на другом компе(нет в сетки), ошибочка вышла...
#include <vector>
vector<int> PointVideo;
//............
bool Send(....){
//.........
PointVideo.resize(i+1);//тут
//ошибка
PointVideo[PointVideo.end()]=....
//.........
}
где i-предыдуший размер...
ещё раз сорри за введение в заблуждение

3
06 июля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by eXod

=)))))
Мда, надо следить за тем что пишешь...=))
Воть. Просто к инету у меня бук подключён, а код на другом компе(нет в сетки), ошибочка вышла...
#include <vector>
vector<int> PointVideo;
//............
bool Send(....){
//.........
PointVideo.resize(i+1);//тут
//ошибка
PointVideo[PointVideo.end()]=....
//.........
}
где i-предыдуший размер...
ещё раз сорри за введение в заблуждение



Другое дело.
Хотя, еще раз взглянуть на то, что возвращает end().
Возвращаемое значение - итератор, указывающий за последний элемент, т.е. за границу вектора, поэтому и появляется ошибка доступа в строке
PointVideo[PointVideo.end()]=....;

Если, ты хочешь просто добавлять элемент в вектор, используй push_back().

6.6K
06 июля 2004 года
eXod
11 / / 06.07.2004
Цитата:
Originally posted by Green


Другое дело.
Хотя, еще раз взглянуть на то, что возвращает end().
Возвращаемое значение - итератор, указывающий за последний элемент, т.е. за границу вектора, поэтому и появляется ошибка доступа в строке
PointVideo[PointVideo.end()]=....;

Если, ты хочешь просто добавлять элемент в вектор, используй push_back().


ОК! Спасибо за разъяснения!=))
Хотя как оказалось для задачи выгоднее использовать список.=))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог