请教一下各位这个问题的原因是什么

void showMenu()
{
    cout<'*')<28)<<"  "<"*****  1.添加联系人  *****"<"*****  2.显示联系人  *****"<"*****  3.删除联系人  *****"<"*****  4.查找联系人  *****"<"*****  5.修改联系人  *****"<"*****  6.清空联系人  *****"<"*****  0.推出通讯录  *****"<"**************************"<//联系人结构体 
struct person
{
    string name;
    string sex;
    int age;
    string pNumber;
    string add;
    
};

//通讯录结构体
struct addressbooks
{
    struct person personArray[MAX];
    int size;
 } ;


//1.添加联系人
void addPerson(addressbooks*ads)
{
    //判断通讯录是否已满,如果满了就不再添加
    if (ads->size==MAX)
    {cout<<"通讯录已满"<return ;}
    else
    {
        //添加具体联系人 
        //姓名
        string name;
        cout<<"请输入姓名:"<>name;
        ads->personArray[ads->size].name=name;
        //性别 
        int sex=0;
        cout<<"请输入性别:"<"1--男"<"2--女"<while(true){
        //如果输入的是1或者2可以推出循环,若有误,重新输入 
        cin>>sex;
        if(sex==1||sex==2){
            ads->personArray[ads->size].sex=sex;
            break;
        }
        cout<<"输入有误,请重新输入"<//年龄
        cout<<"输入年龄:"<int age=0;
        cin>>age;
         ads->personArray[ads->size].age=age;
        //电话
        cout<<"输入联系电话"<string phone=0;
        cin>>phone;
        ads->personArray[ads->size].pNumber=phone;
        //住址 
        
        cout<<"请输入家庭地址:"<string i=0;
        cin>>i;
        ads->personArray[ads->size].add=i;
        //更新通讯录人数
        ads->size++; 
        
        cout<<"添加成功"<"pause");
        system("cls");//清屏 
    };
    
    
    
    
} ;














int main(){
    
    //创建通讯录结构体变量
    addressbooks ads;
    //初始化通讯录中当前人员个数
    ads.size=0; 


```为什么编译的时侯没有显示错误,运行的时候运行到输入电话号码的时候出错了呢
显示    terminate called after throwing an instance of'std::logic_error' what() : basic_string::_S_construct null not valid

string phone=0;错误,你这等于是将 phone设置为空了。只需要string phone 就可以了。或者 string phone = "";
后面的 string i=0,也是一样
string是字符串,不是整数 ,不能初始化等于0的。

string phone=0;
可能是这句用空指针初始化字符串的问题,直接写string phone;试一试呢,还有后面的i也是