Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针有问题吗?_C++_Memory_Vector - Fatal编程技术网

C++ 指针有问题吗?

C++ 指针有问题吗?,c++,memory,vector,C++,Memory,Vector,几个小时来,我一直在挠头,想弄明白为什么会这样 这就是它的基本功能 我有一个名为Table的gui组件。我需要1000张桌子。不多也不少。表同时从小部件和DynamicElement继承。我需要能够传递组件的地址(指针,而不是副本),所以我需要它们不移动 我的第一次尝试成功了。我使用了Table*的向量,每个表都在堆上分别分配。这个方法有点慢,而且可能会导致堆的碎片化,因为我需要1000个 我提出的下一个解决方案是让父类有表m_tables[1000] 我看不出这有什么理由不起作用,但当我这样做

几个小时来,我一直在挠头,想弄明白为什么会这样

这就是它的基本功能

我有一个名为Table的gui组件。我需要1000张桌子。不多也不少。表同时从小部件和DynamicElement继承。我需要能够传递组件的地址(指针,而不是副本),所以我需要它们不移动

我的第一次尝试成功了。我使用了Table*的向量,每个表都在堆上分别分配。这个方法有点慢,而且可能会导致堆的碎片化,因为我需要1000个

我提出的下一个解决方案是让父类有表m_tables[1000]

我看不出这有什么理由不起作用,但当我这样做的时候,它崩溃了。事实上,每当我试图做一些涉及&m_表[x]的事情时,总会出现一些问题

每当有东西试图访问通过DO&m_表[i]获得的指针时,它就会崩溃,并出现0xCCCCC冲突

有什么我不明白的吗

下面是我创建表的方法:

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();
    }
我将表添加到流布局中,当它尝试使用它时,它崩溃了

我试着使用一个std列表,从理论上讲,它应该会产生与我第一次尝试相同的结果,但也失败了


感谢

VC调试版本使用0xCCCC初始化未初始化的变量

()


在调试器下启动程序,以便查看发生在哪一行代码上。如果不是您的代码,请继续调用堆栈,直到您进入“您的”代码。

我不知道您的程序还做什么,或者您的表结构有多大,但是否可能是您已经填充了堆栈并且溢出了?这就解释了为什么在分配堆栈上的所有内容时会出现错误,而不是在将其放入堆时


我以前在从一个堆到另一个堆栈的过程中也遇到过类似的问题…

当它试图呈现没有多大意义、感觉像堆损坏之类的表时,它会崩溃。如果我删除呈现调用,它只会在其他地方崩溃。检查访问的变量是如何初始化的。(在假设堆损坏之前排除所有其他因素,因为它可能会导致各种症状)。那么为什么它不能在我要推回的std列表中工作呢?我无法从给出的代码中判断-拿出调试器,在发生访问冲突时,检查局部变量是否存在错误的值,查看它们的值应在何处初始化,再次使用调试器查看它们是否正确初始化,或者它们的值在何处“丢失”。使用调试器解决崩溃问题。调试器根本没有给我太多帮助,它只会给我带来访问冲突。您是否在这一行调用构造函数
LobbyTable(m_fontMan,m_spriteMan,tableId)?如果您有一个tableId,这不意味着该表已经创建了吗?它是使用默认的无用构造函数创建的。对构造函数的调用不应该包含
new
关键字吗?