关于野指针的错误
下边是我的一个程序,总是出内存错误,我觉得不是数组越界,是链表头出现了野指针,但是我不知道怎么改,新人求助
//头文件Clerk.h#include "iostream"
using namespace std;
struct Clerk
{
unsigned int ClerkNo;
float Salary;
};
struct ClerkNode
{
Clerk date;
ClerkNode *link;
};
class ClerkSalary
{
public:
ClerkSalary();
~ClerkSalary();
bool MakeList(Clerk Array[], int Size);
bool ClearList();
bool AddClerk(unsigned int ClerkNo, float Salary);
bool DelClerk(unsigned int ClerkNo);
bool SetClerk(unsigned int ClerkNo, float NewSalary);
float GetSalary(unsigned int ClearNo);
private:
ClerkNode *m_Node;
};
//源文件Clerk.cpp
#include "Clerk.h"
ClerkSalary::ClerkSalary()
:m_Node(NULL)
{
}
ClerkSalary::~ClerkSalary()
{
ClearList();
}
bool ClerkSalary::MakeList(Clerk Array[], int Size)
{
bool bValue = true;
if (NULL == Array || Size < 0)
{
bValue = false;
return bValue;
}
if (m_Node)
{
ClearList();
}
for (int iLoop = 0; iLoop < Size; iLoop++)
{
if (AddClerk(Array[iLoop].ClerkNo, Array[iLoop].Salary))
{
bValue = true;
}
else
{
bValue = false;
break;
}
}
return bValue;
}
bool ClerkSalary::ClearList()
{
ClerkNode *temp = NULL;
while (m_Node)
{
temp = m_Node;
m_Node = m_Node->link;
delete temp;
}
m_Node = NULL;
return true;
}
bool ClerkSalary::AddClerk(unsigned int ClerkNo, float Salary)
{
Clerk clerk = {ClerkNo, Salary};
ClerkNode *clerknode = new ClerkNode;
clerknode->date = clerk;
clerknode->link = NULL;
if (!m_Node)
{
m_Node = clerknode;
}
else
{
ClerkNode *frontnode = m_Node;
ClerkNode *nextnode = m_Node;
if (ClerkNo < m_Node->date.ClerkNo)
{
m_Node = clerknode;
m_Node->link = nextnode;
}
else
{
while (nextnode && ClerkNo > nextnode->date.ClerkNo)
{
frontnode = nextnode;
nextnode = nextnode->link;
}
if (ClerkNo == nextnode->date.ClerkNo)
{
return false;//编号重复
}
frontnode->link = clerknode;
clerknode->link = nextnode;
}
}
delete clerknode;
return true;
}
bool ClerkSalary::DelClerk(unsigned int ClerkNo)
{
if (!m_Node)
{
return false;
}
else
{
ClerkNode *frontnode = m_Node;
ClerkNode *delnode = m_Node;
if (ClerkNo == m_Node->date.ClerkNo)
{
m_Node = NULL;
delete m_Node;
}
else
{
while (delnode && ClerkNo != delnode->date.ClerkNo)
{
frontnode = delnode;
delnode = delnode->link;
}
if (!delnode)
{
return false;//没找到要被删除的员工编号
}
frontnode->link = delnode->link;
delete delnode;
}
}
return true;
}
bool ClerkSalary::SetClerk(unsigned int ClerkNo, float NewSalary)
{
if (!m_Node)
{
return false;
}
else
{
ClerkNode *setnode = m_Node;
if (ClerkNo == m_Node->date.ClerkNo)
{
m_Node->date.Salary = NewSalary;
}
else
{
while (setnode && ClerkNo != setnode->date.ClerkNo)
{
setnode = setnode->link;
}
if (!setnode)
{
return false;//没找到要被修改工资的员工编号
}
setnode->date.Salary = NewSalary;
}
}
return true;
}
float ClerkSalary::GetSalary(unsigned int ClerkNo)
{
ClerkNode *getnode = m_Node;
while (getnode && ClerkNo != getnode->date.ClerkNo)
{
getnode = getnode->link;
}
if (getnode)
{
cout<<"编号"<<ClerkNo<<"的工资为: "<<getnode->date.Salary<<endl;
return getnode->date.Salary;
}
else
{
return -1;
}
}
//源文件Main.cpp
#include "Clerk.h"
void main()
{
Clerk clerk[20]={ {2,10},{5,20},{6,30}
,{7,40},{9,50},{11,60}
,{12,70},{13,80},{20,90}
};
ClerkSalary clerksalary;
float salary = 0;
clerksalary.ClearList();
clerksalary.MakeList(clerk,9);
clerksalary.AddClerk(0,100);
clerksalary.GetSalary(0);
clerksalary.SetClerk(20,1000);
for (int iLoop = 0; iLoop < 20; iLoop++)
{
cout<<clerk[iLoop].ClerkNo<<' '<<clerk[iLoop].Salary<<endl;
}
system("pause");
}