所以我不熟悉c ++抱歉,如果不清楚的话。
我有一个班级:
class Item
{
int noItem;
int qItem;
public:
Item(int noItem, int qItem)
{
this->noItem = noItem;
this->qItem = qItem;
}
int getNoItem()
{
return noItem;
}
int getQntItem()
{
return qItem;
}
};
然后是以下课程:
class Element
{
public:
Element()
{
data = NULL;
}
//to set and access data hold in node
void setElement(Item *data)
{
this->data = data;
}
Item* getElement(void)
{
return(data);
}
private:
Item *data;
};
这个也是:
class ListeChainee
{
public:
ListeChainee()
{
courant = NULL;
}
void ajoutListe(Item *data)
{
Element *newData;
//set data
newData->setElement(data);
//check if list is empty
if( courant == NULL)
{
//set current pointer
courant = newData;
}
}
//get data from element pointed at by current pointer
Item* elementCourant(void)
{
if(courant != NULL)
{
return courant->getElement();
}
else
{
return NULL;
}
}
private:
//data members
Element *courant; //pointer to current element in list
};
代码缺少其他东西,但我的问题是:
int main(int argc, char* argv[])
{
ListeChainee listeCH;
Item i1(123,456);
listeCH.ajoutListe(&i1);
cout << listeCH.elementCourant()->getNoItem();
system("pause");
return 0;
}
我希望输出123,但我看到其他一些数字。不知道为什么。 感谢。
答案 0 :(得分:2)
您的Element *newData
没有Element类的实例,因此当您尝试访问newData
指向的实例时,它会崩溃。
尝试将Element *newData;
更改为Element *newData = new Element;
。
delete
。答案 1 :(得分:1)
此方法正在写入未初始化的内存:
void ajoutListe(Item *data)
{
Element *new;
//set data
new->setElement(data); // Right here, "new" is an uninitialized pointer
//check if list is empty
if( courant == NULL)
{
//set current pointer
courant = new;
}
}
我很惊讶这个编译(是吗?)。这段代码也应该崩溃。
你得到的奇怪数字肯定是记忆的随机部分。您可能想要更多地考虑内存管理 - 这里存在许多问题。当调用ajoutListe时,为什么courant成员只有在为NULL时才会被设置?我们只是泄漏了新元素吗?我们如何实际遍历此列表?