【发布时间】:2013-01-24 08:14:34
【问题描述】:
我使用 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
【问题讨论】:
-
你没有在这段代码的任何地方使用
new。 -
访问
conn_list时可能越界,发布更多相对于1conn_list1访问的代码? -
conn_list 未定义,未指定 MAX_CONNECTION。
-
其他一切都不正常工作,否则这不会显示内存损坏。再次,仔细考虑您的
card课程(因为我们不能,您必须)。您将这一行作为问题的第一行:ptrIssuResrc = new IssuResource();。 在您的真实代码中该代码在哪里?是在card的构造函数还是成员函数中?cards 是否曾被复制?card是否实现了 Rule of Three 如果它有实时动态指针?等 -
@FatemaMerchant 您在其他地方有未定义的行为,这导致写入一些您不应该写入的内存。只有当受影响的内存包含重要数据时,您才会看到错误,并且只有在您尝试使用数据时才会看到错误。在这种情况下,您正在编写的是管理堆所需的数据,而
operator new是使用它的无辜受害者。
标签: c++ memory-management new-operator