关于new[]与delete[]的小问题
#include "stdafx.h"
#include <iostream>
using namespace std;
#define LEN sizeof(struct People)
struct People
{
int num;
char name[20];
char sex;
char job;
union
{int clas;
char position[10];
}category;
}*person[2];
int main(int argc,TCHAR* argv[])
{int i;
for(i=0;i<2;i++)
{person[i]=new People[LEN];
cout<<"请输入表格信息:"<<endl;
cin>>person[i]->num>>person[i]->name>>person[i]->sex>>person[i]->job;
if(person[i]->job=='s')cin>>person[i]->category.clas;
else if(person[i]->job=='t')cin>>person[i]->category.position;
else cout<<"Error!"<<endl;
}
for(i=0;i<2;i++)
{cout<<"输出表格信息:"<<endl;
if(person[i]->job=='s')
cout<<person[i]->num<<" "<<person[i]->name<<" "<<person[i]->sex<<" "<<person[i]->job<<" "<<person[i]->category.clas;
else
cout<<person[i]->num<<" "<<person[i]->name<<" "<<person[i]->sex<<" "<<person[i]->job<<" "<<person[i]->category.position;
cout<<endl;
delete person[i]; //用delete[] person运行出错
}
return 0;
}
程序中两处红色语句,前面用new [];后面应该用delete [];释放才对啊,为什么不行?
[解决办法]
应该是
delete [] person[i]
吧
[解决办法]
delete[] person放循环外面,删除两次,当然出错了
[解决办法]
++
[解决办法]
person本来就是people结构的数组,所以在delete的时候,delete知道删除多少,不必要使用delete[]
[解决办法]
建议好好看看c++ primer
写个完整的类,包括析构函数,重载操作符,复制构造函数。。。
[解决办法]
应该是delete [] person[i]
[解决办法]
应该是delete [] person[i]
[解决办法]
首先 在你用new分配的时候只需要person【i】=new People就行,
删除的时候是delete 【】 person【i】;这样就ok了