我使用new来分配内存并初始化类的变量。
以下是使用的代码:
新操作员:
ptrIssuResrc = new IssuResource();
-----------------------------------
班级定义:
class IssuResource
{
public:
// constructor: create a IssueResource object
IssuResource(void)
{
lastUpdatedResource = 0;
}
UINT16 lastUpdatedResource;
UINT32 conn_list[MAX_CONNECTION];
bool addConnResourceToList(UINT32);
使用ptrIssuRescr
:
class IssuResource *issuResrcPtr = NULL;
issuResrcPtr = card->ptrIssuResrc;
class IssuResource *ptrIssuResrc = card->ptrIssuResrc;
ptrIssuResrc->addConnResourceToList(connection->getLcn());
由于此代码,我面临一些内存损坏,已缩小范围。请帮我解决这里的错误?我怎样才能确保没有内存整合?我已将新运算符移动到代码中的另一个位置,它运行正常。但我仍然需要确保不会引起新问题。
TIA
答案 0 :(得分:2)
我们无法真正帮助您,因为我们不熟悉您的代码。您的类定义并没有告诉我们所有内容 - 我们应该知道在执行代码期间您的对象究竟发生了什么。如果您不能使用Valgrind,我建议您使用AppVerifier + DebugDiag,它们是免费的并且可以在Windows操作系统上运行。
这些应用程序对内存损坏有很大帮助。我很长时间都在努力找出我的代码出了什么问题,感谢他们只需要几分钟就可以完成。
以下是指向如何使用它们的良好教程的链接:http://blogs.msdn.com/b/lagdas/archive/2008/06/24/debugging-heap-corruption-with-application-verifier-and-debugdiag.aspx
它基本上会告诉您在哪个地方出现堆损坏,因此您更容易找到问题。
希望这会对你有所帮助。
答案 1 :(得分:0)
嗯,您的帖子中没有很多上下文,但您可以尝试在Valgrind中运行此代码,以查看是否有任何内存韭菜,访问未初始化的数据等。
可能会有一些代表问题的代码会有所帮助......