-3

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

4

2 回答 2

2

由于我们不熟悉您的代码,因此我们无法真正帮助您。你的类定义并没有告诉我们一切——我们应该知道在执行代码期间你的对象到底发生了什么。如果你不能使用 Valgrind,我会推荐你​​使用 AppVerifier + DebugDiag,它们是免费的并且可以在 Windows 操作系统上运行。

这些应用程序在内存损坏方面帮助了我很多。为了找出我的代码出了什么问题,我苦苦挣扎了很长时间,多亏了他们,我只花了几分钟就搞定了。

这是一个关于如何使用它们的好教程的链接:http: //blogs.msdn.com/b/lagdas/archive/2008/06/24/debugging-heap-corruption-with-application-verifier-and-debugdiag .aspx

它基本上会告诉您堆损坏出现在哪个位置,因此您更容易找到问题。

希望这会帮助你。

于 2013-01-24T08:43:02.060 回答
0

好吧,您的帖子中没有很多上下文,但是您可以尝试在 Valgrind 中运行此代码,以查看是否有任何内存韭菜,访问未初始化的数据等。

可能有更多说明问题的代码会有所帮助......

于 2013-01-24T08:31:43.213 回答