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

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

Войти
Регистрация
Восстановить пароль
 
igorbelykh
8 / 8 / 2
Регистрация: 01.03.2013
Сообщений: 85
#1

vector выдает странные строки при использовании push_back - C++

03.12.2013, 17:19. Просмотров 286. Ответов 4
Метки нет (Все метки)

Вот что я получаю

Кликните здесь для просмотра всего текста
*** Error in `./main': double free or corruption (!prev): 0x0000000001994a70 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x80a46)[0x7f87390c7a46]
./main[0x401b9a]
./main[0x405a3a]
./main[0x405312]
./main[0x404639]
./main[0x403207]
./main[0x403838]
./main[0x402d52]
./main[0x401e22]
./main[0x40207f]
./main[0x401506]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f8739068ea5]
./main[0x4011b9]
======= Memory map: ========
00400000-00409000 r-xp 00000000 08:03 3024811 /home/igor/C/mnn_cpp/main
00608000-00609000 r--p 00008000 08:03 3024811 /home/igor/C/mnn_cpp/main
00609000-0060a000 rw-p 00009000 08:03 3024811 /home/igor/C/mnn_cpp/main
01928000-019af000 rw-p 00000000 00:00 0 [heap]
7f873847f000-7f8738980000 rw-p 00000000 00:00 0
7f8738d42000-7f8738e45000 r-xp 00000000 08:03 2102465 /lib/x86_64-linux-gnu/libm-2.17.so
7f8738e45000-7f8739045000 ---p 00103000 08:03 2102465 /lib/x86_64-linux-gnu/libm-2.17.so
7f8739045000-7f8739046000 r--p 00103000 08:03 2102465 /lib/x86_64-linux-gnu/libm-2.17.so
7f8739046000-7f8739047000 rw-p 00104000 08:03 2102465 /lib/x86_64-linux-gnu/libm-2.17.so
7f8739047000-7f8739206000 r-xp 00000000 08:03 2102468 /lib/x86_64-linux-gnu/libc-2.17.so
7f8739206000-7f8739405000 ---p 001bf000 08:03 2102468 /lib/x86_64-linux-gnu/libc-2.17.so
7f8739405000-7f8739409000 r--p 001be000 08:03 2102468 /lib/x86_64-linux-gnu/libc-2.17.so
7f8739409000-7f873940b000 rw-p 001c2000 08:03 2102468 /lib/x86_64-linux-gnu/libc-2.17.so
7f873940b000-7f8739410000 rw-p 00000000 00:00 0
7f8739410000-7f8739424000 r-xp 00000000 08:03 2100909 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8739424000-7f8739624000 ---p 00014000 08:03 2100909 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8739624000-7f8739625000 r--p 00014000 08:03 2100909 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8739625000-7f8739626000 rw-p 00015000 08:03 2100909 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8739626000-7f873970b000 r-xp 00000000 08:03 794826 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7f873970b000-7f873990a000 ---p 000e5000 08:03 794826 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7f873990a000-7f8739912000 r--p 000e4000 08:03 794826 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7f8739912000-7f8739914000 rw-p 000ec000 08:03 794826 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
7f8739914000-7f8739929000 rw-p 00000000 00:00 0
7f8739929000-7f873994c000 r-xp 00000000 08:03 2102447 /lib/x86_64-linux-gnu/ld-2.17.so
7f8739b1e000-7f8739b23000 rw-p 00000000 00:00 0
7f8739b47000-7f8739b4b000 rw-p 00000000 00:00 0
7f8739b4b000-7f8739b4c000 r--p 00022000 08:03 2102447 /lib/x86_64-linux-gnu/ld-2.17.so
7f8739b4c000-7f8739b4e000 rw-p 00023000 08:03 2102447 /lib/x86_64-linux-gnu/ld-2.17.so
7fffe8998000-7fffe89b9000 rw-p 00000000 00:00 0 [stack]
7fffe89f9000-7fffe89fb000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Аварийный останов (сделан дамп памяти)


Это происходит после:
C++
1
2
3
4
5
6
7
8
MyClass mcl;
vector <MyClass> mcls;
for(i = 0; i < num; i++)
{
    mcl = MyClass(some_data);
//если здесь после 43й итерации поставить exit(0), то ошибок нет. Ну, т.е. следующая команда после 43й итерации выдает ошибки
    mcls.push_back(mcl);
}
В чем может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос vector выдает странные строки при использовании push_back (C++):

Вызов конструктора с несколькими параметрами при использовании push_back() в vector'е - C++
Ситуация: #include &lt;vector&gt; class bar { public: bar(); bar(int); bar(int, int); //&lt;...&gt; };

При использовании push_back для vector-а, все предыдущие элементы перезаписываются - C++
Доброго времени суток,хочу поместить в вектор пути к файлам в определенной директории. Но когда отлажываю программу то вижу что все...

Меняют ли элементы в vector свои адреса при вызове метода push_back? - C++
Допустим я определил вектор и указатель на один из его элементов: vector&lt; int &gt; v( 10 ); int* p = &amp;(v); Затем использую push_back ...

VisualStudio C++ vector<vector<int> > push_back() - C++
Кодю на VS2010 vector&lt;vector&lt;int&gt; &gt;index_UV; index_UV.push_back(); //должен создаться пустой интовский вектор Вылетает...

Vector . push_back - C++
Доброго времени суток! Помогите пожалуйста поправить код!! #include &lt;vector&gt; #include &lt;iostream&gt; using namespace std; ...

push_back() and vector of classes - C++
Добрый вечер! Есть код следующего вида: class topic_message { public: char* name_topic; message ** messages; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
chedman
81 / 80 / 2
Регистрация: 30.10.2013
Сообщений: 251
03.12.2013, 17:27 #2
Требования для элементов-контейнеров

Элементы, добавленные в контейнер STL могут иметь любой тип объекта, который предоставляет открытый конструктор копии, открытый деструктор и открытый оператор присваивания. Деструктор не может создать исключение. Кроме того, ассоциативные как контейнеры set и map иметь открытый оператор сравнения быть определены, который по умолчанию operator<. Некоторые операции в контейнерах также могут потребовать открытого конструктора по умолчанию и открытого equivalence оператора.
Aloir
217 / 217 / 13
Регистрация: 17.12.2010
Сообщений: 689
03.12.2013, 17:28 #3
покажите код класса: его конструктор и конструктор копирования.

вру: и оператор присваивания
Croessmah
03.12.2013, 17:31
  #4

Не по теме:

Цитата Сообщение от chedman Посмотреть сообщение
Кроме того, ассоциативные как контейнеры set и map иметь открытый оператор сравнения быть определены, который по умолчанию operator<
гугловский переводчик?

chedman
81 / 80 / 2
Регистрация: 30.10.2013
Сообщений: 251
03.12.2013, 17:36 #5
Лень было писать, просто взял от сюда http://www.rsdn.ru/article/cpp/stl.xml,
но я думаю суть в том, что надо проверить класс, объекты которого помещаются в контейнер.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 17:36
Привет! Вот еще темы с ответами:

Ошибка push_back() в vector - C++
Доброго времени суток. Сразу код : #include &quot;stdafx.h&quot; #include &quot;expat.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include...

std::vector<T>.push_back(T) - Error - C++
Не пойму в чем дело, но при добавлении (CTextureManager :: load(const char* file)) в вектор – структуры, выскакивает ошибка...(в...

Vector subscript out of range (push_back, a не []) - C++
При попытке сделать push_back() вектору вылетает ошибка vector subscript out of range. Именно при пуше, не при операторе . Ошибка в...

Метод push_back() класса vector - C++
Пишу алгоритм динамического программирования, на каждой итерации в множество векторов возможно добавление вектора из этого же множества, но...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.12.2013, 17:36
Ответ Создать тему
Опции темы

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