Проблемы с указателями? - PullRequest
0 голосов
/ 24 марта 2012

Я часами чесал голову, пытаясь понять, почему это происходит.

Это то, что он в основном делает.

У меня есть компонент графического интерфейса под названием Table. Мне нужно 1000 столов. Не больше, не меньше. Таблица наследуется от Widget и DynamicElement одновременно. Мне нужно иметь возможность передавать адрес компонента (указатель, а не копия), поэтому мне нужно, чтобы они не двигались.

Первая попытка, которую я сделал, сработала. Я использовал вектор таблицы *, и каждая из таблиц была выделена в куче отдельно. Этот метод немного медленный и рискует фрагментировать кучу даром, потому что мне нужно ровно 1000.

Следующее решение, которое я придумал, заключается в том, чтобы родительский класс имел Table m_tables [1000].

Я не вижу причин, почему это не должно работать, но когда я делаю это таким образом, он падает. Фактически, каждый раз, когда я пытаюсь что-то сделать, используя & m_tables [x], что-то идет не так.

Сбой с нарушением 0xccccccccc всякий раз, когда что-то пытается получить доступ к указателю, полученному с помощью & m_tables [i].

Есть что-то, чего я не понимаю?

Вот как я создаю таблицу:

void LobbyTableManager::createTable( int tableId )
    {
        m_tables[tableId] = LobbyTable(m_fontMan,m_spriteMan,tableId);
        LobbyTable* t = &m_tables[tableId];
        t->addChairActionListeners(this);
        t->addMouseListener(this);
        t->addChairMouseListeners(this);
        t->getTable()->addMouseListener(this);
        t->rescale(1.0f);
        m_activeTables.push_back(t);
        //rescaleTables();

        m_flow->add(t);
        resizeFlow();
        updateScrollBars();
    }

Я добавляю таблицу в макет потока, и в тот момент, когда она пытается ее использовать, она вылетает.

Я пытался использовать стандартный список, который теоретически должен давать тот же результат, что и моя первая попытка, но он тоже дает сбой.

Спасибо

Ответы [ 2 ]

1 голос
/ 24 марта 2012

VC Debug builds инициализирует неинициализированные переменные с 0xCCCCCCCC.

( список специальных значений )

Запустите программу из-под отладчика, чтобы увидеть, в какой строке кода это происходит.Если это не ваш код, поднимайтесь вверх по стеку вызовов, пока не окажетесь внутри «своего» кода.

0 голосов
/ 24 марта 2012

Я не знаю, что еще делает ваша программа или насколько велика структура вашей таблицы, но может ли быть так, что вы заполнили свой стек и получаете переполнение?Это объясняет, почему вы получаете ошибку при размещении всего в стеке, а не когда вы помещаете его в кучу.

У меня были похожие проблемы при переходе из кучи в стек до ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...