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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Тетрис: начало http://www.cyberforum.ru/cpp-beginners/thread341820.html
Здравствуйте. Захотелось мне сделать тетрис. Консольный, некрасивый, но рабочий. Так как мой скилл программирования невысок, то решил начать с малого — научить программку генерировать случайные символы (в дальнейшем это будут фигуры), кидать в случайный столбец двумерного массива, скидывать вниз и складывать стопочкой. В общем-то, все работает как надо, но когда один символ сверху падает на...
C++ Что такое двумерный массив? Не буду долго объяснять мотивы subj-а, но не получается организовать работу с матрицей как с массивом векторов. Пытаюсь написать цикл просмотра массива с использованием указателя на элемент в качестве счетчика. Для вектора int b={1,2,3,4,5}; for (int *i=b; i<b+5; ++i) std::cout<<*i<<' '; Для матрицы, если считать что структура представлена вектором в котором строки последовательно... 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, int); void showmass(int*, int);
C++ При компиляции не может найти хеадер
Написал программу.. она пашет, но когда весь код в main.cpp. Решил ее усовершенствовать, чтобы мейн имел красивее вид, сделал вот так: main.cpp: #include <iostream> #include <fstream> #include "clRead.h" int main(){ ifstream iF("One.txt", ios::in);
C++ Бот http://www.cyberforum.ru/cpp-beginners/thread341691.html
Порекомендуйте библиотеки для имитации нажатия клавиш, кнопок мыши и анализа пикселей с экрана. Хочу написать простенького бота для онлайн игры.
C++ Как убрать знак минус У меня int a = -7. Как программно получить a = 7? подробнее

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

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

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

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

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

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

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