Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KV-1
2 / 2 / 0
Регистрация: 21.09.2013
Сообщений: 20
#1

Vector - C++

06.11.2013, 12:15. Просмотров 369. Ответов 12
Метки нет (Все метки)

Создаю вектор
C++
1
vector<char*> ArrAns(1);
в одном из файлов .cpp. Используется он функциями, описанными в этом файле, и в файле Form2.cpp, куда он включён
C++
1
extern vector<char*> ArrAns;
Проблема в том, что когда я через F10 запускаю программу(по шагам) и она заходит на первый шаг, в векторе ArrAns уже находится более миллиона(?!) элементов. Притом я не менял его, ведь первый шаг
C++
1
2
3
    // Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 12:15     Vector
Посмотрите здесь:

C++ vector
C++ vector
vector C++ C++
C++ vector<vector <bool> >
vector C++
vector C++
C++ vector < vector < pair<int,int> > > g
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 12:23     Vector #2
Сборка - релиз или дебаг?
KV-1
2 / 2 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 12:24  [ТС]     Vector #3
Дебаг. В Release то же самое, кстати.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 12:27     Vector #4
Цитата Сообщение от KV-1 Посмотреть сообщение
vector<char*> ArrAns(1);
а это где записано? внутри какого-нибудь класса/функции? или отдельно от кода
KV-1
2 / 2 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 12:30  [ТС]     Vector #5
Отдельно от кода. Глобальная переменная.
Кстати, это написано с использованием CLR. Другая программа использует Win32 формы, код тот же, но всё работает.
Ilot
Модератор
Эксперт С++
1785 / 1160 / 225
Регистрация: 16.05.2013
Сообщений: 3,056
Записей в блоге: 5
Завершенные тесты: 1
06.11.2013, 12:30     Vector #6
Возможно причина в компиляторе. Некоторые компиляторы резервируют достаточно большой блок памяти для объектов класса vector. Попробуйте зарезервировать в ручную нужный вам размер вектора и посмотрим, что получится:
C++
1
2
std::vector<int> vec;
vec.reserve(/*Размер вектора*/);
Либо проверить в ручную тот же размер:
C++
1
size_type len = vec.capacity();
KV-1
2 / 2 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 12:35  [ТС]     Vector #7
Ни reserve, ни resize не меняют размер. Точнее, и до и после компилятор говорит, что "Элемент содержит более 1000000 дочерних элементов". Visual Studio 2012, если что.
Ilot
Модератор
Эксперт С++
1785 / 1160 / 225
Регистрация: 16.05.2013
Сообщений: 3,056
Записей в блоге: 5
Завершенные тесты: 1
06.11.2013, 12:37     Vector #8
Цитата Сообщение от KV-1 Посмотреть сообщение
Ни reserve, ни resize не меняют размер. Точнее, и до и после компилятор говорит, что "Элемент содержит более 1000000 дочерних элементов". Visual Studio 2012, если что.
Эти методы не могут сделать массив меньше. Проверте размер и если он действительно такой то остается только руки поотбивать компилятору... (в том смысле что у меня других идей нет...)
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
06.11.2013, 13:30     Vector #9
Цитата Сообщение от KV-1 Посмотреть сообщение
ArrAns уже находится более миллиона(?!) элементов.
это что size() столько выдает или как?
KV-1
2 / 2 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 13:35  [ТС]     Vector #10
Цитата Сообщение от KV-1 Посмотреть сообщение
компилятор говорит, что "Элемент содержит более 1000000 дочерних элементов".
Вот как.

Кстати,
C++
1
unsigned long long int asdfg = ArrAns.capacity();
не воспринимается как оператор и пропускается...

Сейчас я пытаюсь исправить Visual Studio(кнопка Исправить у инсталлятора). Быть может, всё из-за того, что компилятор сломался.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 14:37     Vector #11
Что значит не воспринимается как оператор? Запускаем в дебаге, где никаких оптимизаций нет. Прописываем подобный вызов в какой-нибудь функции, заходим в нее и смотрим, что записалось в перемнную
Ilot
Модератор
Эксперт С++
1785 / 1160 / 225
Регистрация: 16.05.2013
Сообщений: 3,056
Записей в блоге: 5
Завершенные тесты: 1
06.11.2013, 16:33     Vector #12
Попробуйте вместо указателя на char поместить в контейнер обекты класса string, если это возможно. Я недавно изучаю STL, но кажется контейнер vector не сильно дружит с указателями. Хотя может я и ошибаюсь... однако мысль...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2013, 18:15     Vector
Еще ссылки по теме:

C++ vector<vector<double>> => 2 * vector<vector<double>>
Vector C++
Поиск в vector < vector <T> > C++
Bind vector<vector<A*>> C++
C++ Vector в vector

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KV-1
2 / 2 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 18:15  [ТС]     Vector #13
ArrAns.size() и ArrAns.capacity() имеют значения 1.

Главное то, что тот же код у меня в другой программе работает, а в этой, с CLR - нет.
Yandex
Объявления
06.11.2013, 18:15     Vector
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru