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

Vector - C++

Восстановить пароль Регистрация
 
KV-1
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 12:15     Vector #1
Создаю вектор
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);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 12:23     Vector #2
Сборка - релиз или дебаг?
KV-1
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 12:24  [ТС]     Vector #3
Дебаг. В Release то же самое, кстати.
I.M.
 Аватар для 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
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 12:30  [ТС]     Vector #5
Отдельно от кода. Глобальная переменная.
Кстати, это написано с использованием CLR. Другая программа использует Win32 формы, код тот же, но всё работает.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 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
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 20
06.11.2013, 12:35  [ТС]     Vector #7
Ни reserve, ни resize не меняют размер. Точнее, и до и после компилятор говорит, что "Элемент содержит более 1000000 дочерних элементов". Visual Studio 2012, если что.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
06.11.2013, 12:37     Vector #8
Цитата Сообщение от KV-1 Посмотреть сообщение
Ни reserve, ни resize не меняют размер. Точнее, и до и после компилятор говорит, что "Элемент содержит более 1000000 дочерних элементов". Visual Studio 2012, если что.
Эти методы не могут сделать массив меньше. Проверте размер и если он действительно такой то остается только руки поотбивать компилятору... (в том смысле что у меня других идей нет...)
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
06.11.2013, 13:30     Vector #9
Цитата Сообщение от KV-1 Посмотреть сообщение
ArrAns уже находится более миллиона(?!) элементов.
это что size() столько выдает или как?
KV-1
0 / 0 / 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.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 14:37     Vector #11
Что значит не воспринимается как оператор? Запускаем в дебаге, где никаких оптимизаций нет. Прописываем подобный вызов в какой-нибудь функции, заходим в нее и смотрим, что записалось в перемнную
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 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<char>>
C++ Не работает функция sort (vector, vector)
Сортировка vector<vector<int>> C++

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

Или воспользуйтесь поиском по форуму:
KV-1
0 / 0 / 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
Ответ Создать тему
Опции темы

Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru