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

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

Восстановить пароль Регистрация
 
igorbelykh
8 / 8 / 2
Регистрация: 01.03.2013
Сообщений: 85
03.12.2013, 17:19     vector выдает странные строки при использовании push_back #1
Вот что я получаю

Кликните здесь для просмотра всего текста
*** 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++ Меняют ли элементы в vector свои адреса при вызове метода push_back?
Вызов конструктора с несколькими параметрами при использовании push_back() в vector'е C++
C++ Vector . push_back
VisualStudio C++ vector<vector<int> > push_back() C++
C++ push_back() and vector of classes
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
chedman
80 / 79 / 2
Регистрация: 30.10.2013
Сообщений: 249
03.12.2013, 17:27     vector выдает странные строки при использовании push_back #2
Требования для элементов-контейнеров

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

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

Не по теме:

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

chedman
80 / 79 / 2
Регистрация: 30.10.2013
Сообщений: 249
03.12.2013, 17:36     vector выдает странные строки при использовании push_back #5
Лень было писать, просто взял от сюда http://www.rsdn.ru/article/cpp/stl.xml,
но я думаю суть в том, что надо проверить класс, объекты которого помещаются в контейнер.
Yandex
Объявления
03.12.2013, 17:36     vector выдает странные строки при использовании push_back
Ответ Создать тему
Опции темы

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