Miki_Sa_yaka 2022-08-10 09:10 采纳率: 77.8%
浏览 35

C++添加delete函数后主函数报错

问题遇到的现象和发生背景

添加delete函数后主函数报错

问题相关代码,请勿粘贴截图
#include <iostream>
#include <cstdlib>
#include <string>
#define MAX 1000
using namespace std;

// 联系人结构体的创建
struct Contacter
{
    // 姓名
    string name;

    // 性别
    string gender;

    // 联系电话
    int phone_number;

    // 家庭住址
    string homeland;
};

// 通讯录结构体的创建
struct Menu
{
    // 存放联系人的数组
    Contacter Con_menu[MAX];

    // 存放联系人的多少
    int Mysize=0;
};

// 函数声明

// 菜单函数
void Showmenu();

// 添加联系人函数
struct Contacter Add_contacter(Menu Main_menu_fun);

// 打印通讯录的函数
void Print(Menu Main_menu_fun);
// 第一个参数为联系人列表

// 删除联系人
void Remove(Menu&Main_menu_fun);

// 查找联系人
void Find(Menu Main_menu_fun);

// 修改联系人
void Modify(Menu Main_menu_fun);

// 清空联系人
void Delete(Menu Main_menu_fun);



int main()
{
    // 初始化
    int Request_Code = -1;   // 指令参量
    bool Quit = false;       // 退出状态判断
    struct Menu    Main_menu;   // 通讯录本体


    // 程序主体
    while(1)
    {
        // 菜单显示
        Showmenu();
        cout << "请输入操作指令:" << endl;
        cin >> Request_Code;   // 状态选择
        
        
        switch (Request_Code)
        {
        
        // 添加联系人
        case 1:
            if (Main_menu.Mysize < 1000)
            {
                Main_menu.Con_menu[Main_menu.Mysize] = Add_contacter(Main_menu);
                Main_menu.Mysize++;
                break;
            }
            else
            {
                cout << "通讯录已满,不可添加";
                break;
            }
        


        // 显示联系人
        case 2:
            Print(Main_menu);
            break;



        // 删除联系人
        case 3:
            Remove(Main_menu);
            break;



        // 查找联系人
        case 4:
            Find(Main_menu);
            break;



        // 修改联系人
        case 5:
            Modify(Main_menu);
            break;



        // 清空联系人
        case 6:
            Delete(Main_menu);
            break;



        // 退出该程序
        case 0:
            Quit = true;
            break;



        // 其他情况
        default:
            break;
        }



        if (Quit)
        {
            break;
        }
        else
        {
            // 按下任意键清屏
            system("pause");
            system("cls");
        }
    }
    

    return 0;
}




//菜单函数
void Showmenu()
{
    cout << "*****************通讯录系统******************" << endl;
    cout << "*********************************************" << endl;
    cout << "*************1  --->  添加联系人*************" << endl;
    cout << "*********************************************" << endl;
    cout << "*************2  --->  显示联系人*************" << endl;
    cout << "*********************************************" << endl;
    cout << "*************3  --->  删除联系人*************" << endl;
    cout << "*********************************************" << endl;
    cout << "*************4  --->  查找联系人*************" << endl;
    cout << "*********************************************" << endl;
    cout << "*************5  --->  修改联系人*************" << endl;
    cout << "*********************************************" << endl;
    cout << "*************6  --->  清空联系人*************" << endl;
    cout << "*********************************************" << endl;
    cout << "*************0  --->  退出本系统*************" << endl;
    cout << "*********************************************" << endl;
    cout << endl;

}



// 1. 添加联系人
struct Contacter Add_contacter(Menu Main_menu_fun)
{
    struct Contacter addcon_fun;
    
    while(true)
    {
        
        cout << "添加的联系人姓名:";
        cin >> addcon_fun.name;

        // 检索重复联系人
        if (addcon_fun.name == Main_menu_fun.Con_menu->name)
        {
            cout << "已有该联系人,请重新输入" << endl;
            continue;
        }

        cout << endl;
        cout << "添加的联系人性别:";
        cin >> addcon_fun.gender;
        cout << endl;
        cout << "添加的联系人电话号码:";
        cin >> addcon_fun.phone_number;
        cout << endl;
        cout << "添加的联系人家庭住址:";
        cin >> addcon_fun.homeland;
        cout << endl;

        
        break;
    }


    return addcon_fun;
}



// 2.显示联系人
void Print(Menu Main_menu_fun)
{
    cout << "联系人\t" << "性别\t" << "电话\t" << "住址\t" << endl;
    for (int i = 0; i < Main_menu_fun.Mysize; i++)
    {
        cout << Main_menu_fun.Con_menu[i].name << "\t"
            << Main_menu_fun.Con_menu[i].gender << "\t"
            << Main_menu_fun.Con_menu[i].phone_number << "\t"
            << Main_menu_fun.Con_menu[i].homeland << "\t" << endl;
    }
}



//3. 删除联系人
void Remove(Menu&Main_menu_fun)
{
    cout << "请键入要删除的联系人" << endl;
    string temp;
    int temp_int = -1;
    cin >> temp;
    for (int i = 0; i < Main_menu_fun.Mysize; i++)
    {
        if (temp == Main_menu_fun.Con_menu[i].name)
        {
            temp_int = i;
        }
    }
    if (temp_int == -1)
    {
        cout << "查无此人" << endl;
    }
    else
    {
        for (int j = temp_int; j < Main_menu_fun.Mysize; j++)
            {
                Main_menu_fun.Con_menu[j] = Main_menu_fun.Con_menu[j + 1];
            }
    }
    
    Main_menu_fun.Mysize--;
}


// 4.查找联系人
void Find(Menu Main_menu_fun)
{
    cout << "请键入要查找的联系人" << endl;
    string temp;
    int temp_int = -1;
    cin >> temp;
    for (int i = 0; i < Main_menu_fun.Mysize; i++)
    {
        if (temp == Main_menu_fun.Con_menu[i].name)
        {
            temp_int = i;
        }
    }
    if (temp_int == -1)
    {
        cout << "查无此人" << endl;
    }
    else
    {
        cout << "姓名:" << Main_menu_fun.Con_menu[temp_int].name << endl;
        cout << "性别:" << Main_menu_fun.Con_menu[temp_int].gender << endl;;
        cout << "家庭住址:" << Main_menu_fun.Con_menu[temp_int].homeland << endl;;
        cout << "电话号码:" << Main_menu_fun.Con_menu[temp_int].phone_number << endl;;
    }
}


// 5.修改联系人
void Modify(Menu Main_menu_fun)
{
    cout << "请键入要修改的联系人" << endl;
    string temp;
    int temp_int = -1;
    cin >> temp;
    for (int i = 0; i < Main_menu_fun.Mysize; i++)
    {
        if (temp == Main_menu_fun.Con_menu[i].name)
        {
            temp_int = i;
        }
    }
    if (temp_int == -1)
    {
        cout << "查无此人" << endl;
    }
    else
    {
        string temp_1;
        cout << "请输入修改后的性别" << endl;
        cin >> temp_1;
        Main_menu_fun.Con_menu[temp_int].gender = temp_1;

        int num;
        cout << "请输入修改后的电话号码" << endl;
        cin >> num;
        Main_menu_fun.Con_menu[temp_int].phone_number = num;

        string temp_2;
        cout << "请输入修改后的家庭住址" << endl;
        cin >> temp_2;
        Main_menu_fun.Con_menu[temp_int].homeland= temp_2;

    }
}




// 6.清空联系人
void Delete(Menu Main_menu_fun)
{
    Main_menu_fun.Mysize = 0;
    cout << "数据已清零" << endl;
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

是不是一定要用指针

我想要达到的结果

解决这个警告和报错

  • 写回答

4条回答 默认 最新

  • 快乐鹦鹉 2022-08-10 09:16
    关注

    你执行delete函数了吗?
    你要说一下你具体的执行步骤,因为你的程序有一些相关的东西,你实际执行的菜单项顺序是什么?最终是执行哪个菜单项的时候崩溃的?

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月10日

悬赏问题

  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开