C++ 指针有问题吗?
几个小时来,我一直在挠头,想弄明白为什么会这样 这就是它的基本功能 我有一个名为Table的gui组件。我需要1000张桌子。不多也不少。表同时从小部件和DynamicElement继承。我需要能够传递组件的地址(指针,而不是副本),所以我需要它们不移动 我的第一次尝试成功了。我使用了Table*的向量,每个表都在堆上分别分配。这个方法有点慢,而且可能会导致堆的碎片化,因为我需要1000个 我提出的下一个解决方案是让父类有表m_tables[1000] 我看不出这有什么理由不起作用,但当我这样做的时候,它崩溃了。事实上,每当我试图做一些涉及&m_表[x]的事情时,总会出现一些问题 每当有东西试图访问通过DO&m_表[i]获得的指针时,它就会崩溃,并出现0xCCCCC冲突 有什么我不明白的吗 下面是我创建表的方法:C++ 指针有问题吗?,c++,memory,vector,C++,Memory,Vector,几个小时来,我一直在挠头,想弄明白为什么会这样 这就是它的基本功能 我有一个名为Table的gui组件。我需要1000张桌子。不多也不少。表同时从小部件和DynamicElement继承。我需要能够传递组件的地址(指针,而不是副本),所以我需要它们不移动 我的第一次尝试成功了。我使用了Table*的向量,每个表都在堆上分别分配。这个方法有点慢,而且可能会导致堆的碎片化,因为我需要1000个 我提出的下一个解决方案是让父类有表m_tables[1000] 我看不出这有什么理由不起作用,但当我这样做
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
关键字吗?