当我运行程序并新建一个NetworkEditor时,它会在构造函数中损坏,因为它会读出数组的内存。
当我通过一个循环调试一个循环时,它会没问题!?
为什么?在进入构造函数之前,它没有为数组分配足够的内存吗?
在我的班上,我有两个属性:
/*NetworkEditor.h*/
class CNetworkEditor : public CDiagramEditor
{...
VLLink* VL_list[10];
VLLink* temp_VL_list[10];
}
在构造函数中,我初始化了arraies:
/*NetworkEditor.cpp*/
for (int i = 0; i < 10; i++)
{
VLLink* vl_link = NULL;
while(vl_link == NULL)
{
vl_link = new VLLink;
}
vl_link->preLink = NULL;
vl_link->nextLink = NULL;
vl_link->link = NULL;
VLLink* vl_link2 = NULL;
while (vl_link2 == NULL)
{
vl_link2 = new VLLink;
}
vl_link2->preLink = NULL;
vl_link2->nextLink = NULL;
vl_link2->link = NULL;
VL_list[i] = vl_link;
temp_VL_list[i] = vl_link2;
}
和VLLink定义为:
typedef struct struct_VLLink
{
CPhysicalLink* link;
struct_VLLink* preLink;
struct_VLLink* nextLink;
}VLLink;
如果我将其更改为:
VLLink* VL_list2[10];
VLLink* temp_VL_list2[10];
for (int i = 0; i < MAX_VL_NUM; i++)
{
VLLink* vl_link = NULL;
while(vl_link == NULL)
{
vl_link = new VLLink;
}
vl_link->preLink = NULL;
vl_link->nextLink = NULL;
vl_link->link = NULL;
VLLink* vl_link2 = NULL;
while (vl_link2 == NULL)
{
vl_link2 = new VLLink;
}
vl_link2->preLink = NULL;
vl_link2->nextLink = NULL;
vl_link2->link = NULL;
VL_list2[i] = vl_link;
temp_VL_list2[i] = vl_link2;
}
没关系!?
答案 0 :(得分:0)
除了@ PeterHuene建议用VL_list
或类似内容替换temp_VL_list
和std::list<CPhysicalLink>
之外,你应该将VLLink
的初始化移到构造函数中,避免代码循环中的重复
struct VLLink {
VLLink() : link(NULL), prelink(NULL), nextlink(NULL) {}
...
};`
然后你可以减少你的循环,因为@MikeSeymour说
for (int i = 0; i < MAX_VL_NUM; i++) {
VL_list[i] = new VLLink();
temp_VL_list[i] = new VLLink();
}
您的内存问题的原因可能是MAX_VL_NUM
大于10.因此,您应该在任何地方使用MAX_VL_NUM
或在任何地方使用10。
现在问你的问题; - )
如果我把它改成......那就没问题了??
没有人能回答这个问题,因为没有人知道你想要达到什么目的。我的第一反应肯定是 No!,因为围绕“仅仅因为”移动变量几乎总是一个坏主意。分析问题并解决问题比解决一些随机症状更好。
您的更改还会修改堆栈中类成员到自动变量的含义。