C++作业求助~
刚学了继承,做一道作业,小型公司人员管理,第一次录入销售人员信息没问题,第二次录入(添加)时就会出错,应该是内存问题,但小弟找不出。。。纠结了很久,希望各位大牛能帮一下忙
问题所在应该是一下一部分:
void adds(salemen sales[],int &s) //s是已有销售人员的数量,sales就是销售人员类的数组
{
int n,i,num,count,y,d,m;
char apm[10],name[10],sex;
cout<<"请输入你要添加的销售人员数量:";
cin>>n;
salemen *temp; //临时指针,问题应该是出在这里,调试时会跳回去cin>>n;那一句,然后出错
temp = new salemen[s+n];
if (temp!=NULL)
{
for (i=0; i<s; i++) temp[i]=sales[i];
cout<<"请输入每个员工信息,依次是:部门,销售额,编号,姓名,性别,出生年月日"<<endl;
for (i=s; i<s+n; i++)
{
cin>>apm>>count>>num>>name>>sex>>y>>m>>d;
SetInfo(temp[i],num,name,sex,y,m,d); //录入信息
temp[i].Setapm(apm);
temp[i].Setcount(count);
}
s=s+n;
if (sales!=NULL)
{ delete []sales; } //delete 不 delete 指针temp 都会出错。。。。
sales = new salemen[s];
for (i=0; i<s; i++) sales[i]=temp[i];
} else cout<<"申请内存空间失败,请重新再试"<<endl;
for (i=0; i<s; i++) sales[i].show();
}
我绝对相信指针和内存的问题。。。
[解决办法]
delete []sales
你的sales传进来的参数是一个数组 不是指针 不能delete
[解决办法]
sales = new salemen[s];这句有问题,建议你把函数参数列表改为void adds(salemen* sales,int &s)试试。
[解决办法]
我感觉确实是sales = new salesmen[s]的问题
事实上,sales是这个函数的局部变量,只是它是一个指针,指向的位置和实参是一样的
也就是说,如果在函数中对这个变量赋值,比如说 sales = 0; 只是影响了这一个变量而已,实参的值未变,还是指向原来的位置。
所先将sales delete了,那么实参所指位置被销毁了,实参变成野指针了。
你可以试试返回新的sales