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

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

Войти
Регистрация
Восстановить пароль
 
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 665
Завершенные тесты: 1
#1

Непонятное поведение list, vector в другом классе - C++

15.07.2013, 16:03. Просмотров 295. Ответов 2
Метки нет (Все метки)

Салют.

C++
1
2
3
4
5
6
7
8
9
10
class _auxObserver {
        ---
    list<gmObjBase*> mObservedObj;
    vector<int> b;
 
public:
    _auxObserver();
    
    void add(gmObjBase* obj);
        ---
и реализация этой части:
C++
1
2
3
4
5
6
_auxObserver::_auxObserver() {};
    
void _auxObserver::add(gmObjBase* obj) {
    //mObservedObj.push_front(obj);
    b.push_back(0);
};
Так вот, в функции add программа падает... именно в push_back, insert и тп. Я думал что-то не так с моим gmObjBase, но даже для int падает. А если объявить b как указатель на вектор(или list), то все работает.
первый раз с таким поведением сталкиваюсь, раньше все прекрасно работало. Думал - может оно исключение выбрасывает, ан нет...программа просто завершает работу без указания ошибок.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 16:03     Непонятное поведение list, vector в другом классе
Посмотрите здесь:

Непонятное поведение - C++
Всем привет! В книге &quot;Прата - Язык программирования C++. Лекции и управжения 2011&quot; нашёл вот такой пример: const free_throws &amp;clone(...

Непонятное поведение программы - C++
Пишу статическую либу. В ней есть кусок кода, который уходит в рекурсию.. Только причины мне непонятны.. Вот кусок кода std::string...

Непонятное поведение программы - C++
Привет народ, вот кароч: #include&quot;stdafx.h&quot; #include&quot;iostream&quot; using namespace std; class calc{ int *i, *j; public: int...

Непонятное мне поведение функции - C++
Эта функция себя странно ведёт. Она работает и если с первого раза ввести цифры с клавиатуры, то работает корректно, но если сначала ввести...

Непонятное поведение std::valarray - C++
Есть такой код: #include &lt;iostream&gt; #include &lt;valarray&gt; using namespace std; int main() { valarray&lt;int&gt; a(2); a = 2;...

Непонятное поведение простейшей формулы - C++
Добрый вечер. Дано: double a; double d; unsigned int c; unsigned int b; for loop{ //манипуляции

Непонятное поведение простой функции - C++
Решал одну задачу на рекурсию, долго не мог добится результата пока не понял что проблема не в рекурсии а в аргументах функции, сделал...

Непонятное объявление в классе - C++
Здравствуйте! Помогите разобраться в следущем коде: typedef float (* ClassAFunc)(const float x, const float z);//откуда берется...

Шаблонный класс с шаблонным оператором внутри - непонятное поведение - C++
Написал &quot;кукольный&quot; пример, дабы не смущать читателей ненужными деталями. #include &lt;iostream&gt; template &lt;typename T&gt; struct foo...

Непонятное явление при перегрузке умножения в классе матриц - C++
ну собсна есть класс class matrix { private: int n, m; double *p; public: matrix(); matrix(int, double =...

Vector в Классе - C++
Добрый день. Не могу понять, как можно реализовать вектор в классе с конструктором. Просто в main все работает. Набросал код для класса,...

Двумерный vector в классе - C++
Добрый день. Возникла задача хранить в классе данные в двумерном vector. Причем, количество строк и столбцов заранее неизвестно....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.07.2013, 17:05     Непонятное поведение list, vector в другом классе #2
monolit, попробуйте минимально возможную программу сделать, которая будет падать.
На первый взгляд проблем быть не должно. Но не видно как осуществляется вызов add(), может быть через указатель, который есть nullptr? И может и в другом месте проблемы, а сказывается при вызове add().
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 665
Завершенные тесты: 1
15.07.2013, 17:29  [ТС]     Непонятное поведение list, vector в другом классе #3
Возник такой вопрос: может ли при текущем определении _auxObserver'а неправильно работать оператор присваивания по умолчанию? И еще. Ниже класс матрицы, в которой я вначале пытался хранить этот _auxObserver напрямую, т.е. gmMatrix<_auxObserver> -- не работало. но gmMatrix<_auxObserver*> работает ка надо, и insert и push_bask корректно себя ведут. Где может быть это узкое место, из-за которого это происходит?)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
template<typename T>
class gmMatrix {
    T** mData;
    int mWidth, mHeight;
 
    inline void destroy() {
        if (mData) {
            for(int i = 0; i<mWidth; ++i) delete[] mData[i];
            delete[] mData;
            mData = 0;
        }
    };
    inline void create(int width, int height, const T& val) {
        mData = new T*[width];
        for(int i = 0; i<width; ++i) {
            mData[i] = new T[height];
            for(int j = 0; j<height; ++j) mData[i][j] = val;
        }
        mWidth = width;
        mHeight = height;
    };
public:
    gmMatrix(): mData(0), mWidth(0), mHeight(0) {};
    gmMatrix(const gmMatrix<T>& matrix): mData(0) {
        mWidth = matrix.mWidth;
        mHeight = matrix.mHeight;
        mData = new T*[mWidth];
        for(int i = 0; i<mWidth; ++i) {
            mData[i] = new T[mHeight];
            for(int j = 0; j<mHeight; ++j) mData[i][j] = matrix.mData[i][j];
        }
    };
    gmMatrix(int width, int height, const T& val = 0): mData(0) {
        create(width, height, val);
    };
    ~gmMatrix() {
        if (mData) {
            for(int i = 0; i<mWidth; ++i) delete[] mData[i];
            delete[] mData;
        }
    };
 
    gmMatrix<T>& operator = (const gmMatrix<T>& matrix) {
        if (this == &matrix) return *this;
 
        destroy();
        mWidth = matrix.mWidth;
        mHeight = matrix.mHeight;
        mData = new T*[mWidth];
        for(int i = 0; i<mWidth; ++i) {
            mData[i] = new T[mHeight];
            memcpy(mData[i], matrix.mData[i], sizeof(T)*mHeight);
        }
        return *this;
    };
 
 
    inline int height() const {
        return mHeight;
    };
    inline int width() const {
        return mWidth;
    };
 
 
    inline T& operator () (int i, int j) {
        return mData[i][j];
    };
    inline const T operator () (const ipair& point) const { 
        return mData[point.first][point.second];
    };
    inline const T operator () (int i, int j) const {
        return mData[i][j];
    };
};
Вот такие дела... Грешу на оператор присваивания и sizeof(T)(авось ему размер точно неизвестен, хотя вроде все должно быть нормально), больше хз. A add вызывается для элемента этой матрицы.
Yandex
Объявления
15.07.2013, 17:29     Непонятное поведение list, vector в другом классе
Ответ Создать тему
Опции темы

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