Форум программистов, компьютерный форум, киберфорум
Наши страницы

std::vector<T>.push_back(T) - Error - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Тетрис: начало http://www.cyberforum.ru/cpp-beginners/thread341820.html
Здравствуйте. Захотелось мне сделать тетрис. Консольный, некрасивый, но рабочий. Так как мой скилл программирования невысок, то решил начать с малого — научить программку генерировать случайные...
C++ Что такое двумерный массив? Не буду долго объяснять мотивы subj-а, но не получается организовать работу с матрицей как с массивом векторов. Пытаюсь написать цикл просмотра массива с использованием указателя на элемент в... http://www.cyberforum.ru/cpp-beginners/thread341769.html
Копирую строчки двумерного массива и программа начинает вести себя странно C++
В общем, есть некоторый полузапиленный код. #include <iostream> #include <cstdlib> #include <stdlib.h> #include <conio.h> #include <time.h> using namespace std; void showmass(int**, int,...
C++ При компиляции не может найти хеадер
Написал программу.. она пашет, но когда весь код в main.cpp. Решил ее усовершенствовать, чтобы мейн имел красивее вид, сделал вот так: main.cpp: #include <iostream> #include <fstream> #include...
C++ Бот http://www.cyberforum.ru/cpp-beginners/thread341691.html
Порекомендуйте библиотеки для имитации нажатия клавиш, кнопок мыши и анализа пикселей с экрана. Хочу написать простенького бота для онлайн игры.
C++ Как убрать знак минус У меня int a = -7. Как программно получить a = 7? подробнее

Показать сообщение отдельно
Bers
Заблокирован
14.08.2011, 10:39
Цитата Сообщение от goto Посмотреть сообщение
p.s. а оператор копирования обязательно свой определять для stl::vector? Компилятор должен же по умолчанию сгенерировать, если его нет, может в этом проблема.
Есть вероятность, что он генерит нечто, не то, что нужно.
Особенно, если структура содержит какие то нетривиальные данные (поля-данные не POD объекты, указатели, и тп)

У меня однажды был случай, тоже с вектором, программа падала в каких то дебрях.
Оказалось, что ИмяКласса( ИмяКласса &ИсточникДанных); // это нефига не конструктор копирования.

Правильный конструктор копирования получается вот так:
ИмяКласса( const ИмяКласса &ИсточникДанных); //забыл указать ключевое слово const

В итоге, компилятор действительно генерил дефолтный конструктор копирования, и данные копировались как то видимо не так. Ошибку несколько часов вылавливал)

В вашем случае хочется взглянуть на код самой структуры.

Ошибка, которую выводит компилятор можно понимать так: нечто использует неправомерное чтение памяти, что приводит к "неопределённому поведению".

/зы один из способов отловить подобный тип ошибок - выполнить для данных (в вашем случае для структуры) все контракты контейнера.
То бишь, ручками определить копирующий конструктор, operator==, operator!=
Если ошибка не исчезнет - значит, она не связана с нарушением контрактов с контейнером. И нужно искать дальше...
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru