新操作员导致内存损坏

时间:2013-01-24 08:14:34

标签: c++ memory-management new-operator

我使用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

2 个答案:

答案 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中运行此代码,以查看是否有任何内存韭菜,访问未初始化的数据等。

可能会有一些代表问题的代码会有所帮助......