在用c/c++实现动态通讯录时,在添加功能时判断是否需要扩容的时候为什莫会出现无法运行?
这是实现添加部分的代码
#include<iostream>
#include<string>
#include <stdlib.h>
#define MAX 10//创建初始的容量;
#define CAPACITY 5//一次扩容的容量;
using namespace std;
class people//联系人类
{
public:
string name;//姓名;
string sex;//性别;
int age;//年龄;
int phone;//电话;
string address;//地址;
};
class peoplebook //联系人管理系统;
{
public:
people* data;//指向动态申请空间,用来存放联系人信息;
int size;//记录当前通讯录中有效信息个数;
int capacity;//记录当前通讯录最大容量
public:
void Addpeople(peoplebook* pc);//1-添加;
void Findpeople(peoplebook* pc);//2-查找
void Delepeople(peoplebook* pc);//3-删除
void showpeople(peoplebook* pc);//4-显示
void changepeople(peoplebook* pc);//5-修改
};
//实现添加联系人;
void peoplebook::Addpeople(peoplebook* pc)
{
if (pc->size == pc->capacity)//判断是否需要扩容
{
people* ptr = NULL;
ptr = (people*)realloc(pc->data, (pc->capacity + CAPACITY) * sizeof(people));
if (ptr != NULL)
{
pc->data = ptr;
pc->capacity += CAPACITY;
ptr = NULL;
}
else
{
perror("Addpeople");
cout << "增加联系人失败" << endl;
return;
}
}
//添加一个联系人的信息
string name; string sex; int age; int phone; string address;
cout << "请输入联系人的基本信息" << endl;
//姓名
cout << "姓名:" << endl;
cin >> name;
pc->data[pc->size].name = name;
//性别
cout << "性别:" << endl;
cin >> sex;
pc->data[pc->size].sex = sex;
//年龄
cout << "年龄:" << endl;
cin >> age;
pc->data[pc->size].age = age;
//电话
cout << "电话:" << endl;
cin >> phone;
pc->data[pc->size].phone = phone;
//地址
cout << "地址:" << endl;
cin >> address;
pc->data[pc->size].address = address;
//指向下一位联系人
pc->size++;
cout << "添加成功" << endl;
system("pause");
system("cls");
}
/通讯录初始化
void Initpeoplebook(peoplebook* pc)
{
pc->data = (people*)malloc(MAX * sizeof(people));
if (pc->data == NULL)
{
perror("Initpeoplebook");
return;
}
pc->size = 0;
pc->capacity = CAPACITY;
}
//销毁通讯录
void Destorypeoplebook(peoplebook* pc)
{
free(pc->data);
pc->data = NULL;
pc->size = 0;
pc->capacity = 0;
}
int main()
{
//创建通讯录
peoplebook s;
//初始化通讯录
Initpeoplebook(&s);
int input = 0;
while (true)
{
menu();
cout << "请选择" << endl;
cin >> input;
switch (input)
{
case 1://添加
s.Addpeople(&s);
break;
case 0:
Destorypeoplebook(&s);
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
default:
cout << "输入错误,请重新输入" << endl;
break;
}
}
system("pause");
system("cls");
return 0;
}
代码不全,看不清楚。提示指针没有初始化