ccccccash 2022-06-14 23:12 采纳率: 50%
浏览 1636
已结题

C6262函数使用堆叠的字节

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

创建了一个嵌套的结构体数组,参数设置1000栈就告急

问题相关代码,请勿粘贴截图

#include<iostream>
using namespace std;
#define max 1000

void showMenu()
{
    cout << "***************************" << endl;
    cout << "*****  1、添加联系人  *****" << endl;
    cout << "*****  2、显示联系人  *****" << endl;
    cout << "*****  3、删除联系人  *****" << endl;
    cout << "*****  4、查找联系人  *****" << endl;
    cout << "*****  5、修改联系人  *****" << endl;
    cout << "*****  6、清空联系人  *****" << endl;
    cout << "*****  0、退出通讯录  *****" << endl;
    cout << "***************************" << endl;
}

struct person
{
    string name;
    string gender;
    int age =0;
    string phone;
    string adress;

};

struct adressBooks
{
    struct person arr[max];
    int m_size=0;
};

void addperson(adressBooks *p)
{
    if (p->m_size == max)
    {
        cout << "通讯录已满无法继续添加" << endl;
        return;
    }
    else
    {
        cout << "请输入姓名:" << endl;
        string name ;
        cin >> name;
        p->arr[p->m_size].name = name;

        cout << "请输入性别:" << endl;
        int gender;
        cout << "1----男" << endl;
        cout << "2----女" << endl;
        while (true)
        {
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                string sex = gender == 1 ? "男" : "女";
                p->arr[p->m_size].gender = sex;
                break;
            }
            else
            {
                cout << "输入错误请重新输入" << endl;
            }
        }
        
        cout << "请输入年龄:" << endl;
        int age = p->arr[p->m_size].age;
        cin >> age;
        p->arr[p->m_size].age = age;

        cout << "请输入电话:" << endl;
        string phone = p->arr[p->m_size].phone;
        cin >> phone;
        p->arr[p->m_size].phone = phone;


        cout << "请输入地址:" << endl;
        string adress = p->arr[p->m_size].adress;
        cin >> adress;
        p->arr[p->m_size].adress = adress;

        p->m_size++;
        cout << "添加完毕" << endl;
        system("pause");
        system("cls");
    }
}

void showlist(adressBooks *p)
{
    if (p->m_size != 0)
    {
        for (int i = 0; i < p->m_size; i++)
        {
            cout << p->arr[i].name << "\t"
                << p->arr[i].gender << "\t"
                << p->arr[i].age << "\t"
                << p->arr[i].phone << "\t"
                << p->arr[i].adress<<endl;
        }
    }
    else
    {
        cout << "记录为空" << endl;
    }
}

int isExist(adressBooks* p,string name)
{
    for (int i = 0; i <= p->m_size; i++)
    {
        if (p->arr[i].name == name)
        {
            return i;
        }
    }
    return -1;
}

void deletePerson(adressBooks * p)
{
    cout << "请输入您要删除的联系人:" << endl;
    string name;
    cin >> name;
    int ret = isExist(p, name);
    if (ret != -1)
    {
        for (int i = ret; i < p->m_size; i++)
        {
            p->arr[i] = p->arr[i + 1];
        }
        p->m_size--;
        cout << "删除成功"<<endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
}

void findPerson(adressBooks* p)
{
    cout << "请输入您要修改的联系人" << endl;
    string name;
    cin >> name;
    int ret = isExist(p, name);
    if (ret != -1)
    {
        cout << p->arr[ret].name << "\t"
            << p->arr[ret].gender << "\t"
            << p->arr[ret].age << "\t"
            << p->arr[ret].phone << "\t"
            << p->arr[ret].adress << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
}

void editPerson(adressBooks* p)
{
    cout << "请输入您要修改的联系人" << endl;
    string name;
    cin >> name;
    int ret = isExist(p, name);
    if (ret != -1)
    {
        cout << "请输入姓名:" << endl;
        string name;
        cin >> name;
        p->arr[ret].name = name;

        cout << "请输入性别:" << endl;
        int gender;
        cout << "1----男" << endl;
        cout << "2----女" << endl;
        while (true)
        {
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                string sex = gender == 1 ? "男" : "女";
                p->arr[ret].gender = sex;
                break;
            }
            else
            {
                cout << "输入错误请重新输入" << endl;
            }
        }

        cout << "请输入年龄:" << endl;
        int age = p->arr[p->m_size].age;
        cin >> age;
        p->arr[ret].age = age;

        cout << "请输入电话:" << endl;
        string phone = p->arr[p->m_size].phone;
        cin >> phone;
        p->arr[ret].phone = phone;


        cout << "请输入地址:" << endl;
        string adress = p->arr[p->m_size].adress;
        cin >> adress;
        p->arr[ret].adress = adress;
    }
    else
    {
        cout << "查无此人" << endl;
    }
}

void clearAll(adressBooks* p)
{
    p->m_size = 0;
    cout << "联系人已清空" << endl;
}
int main()
{
    adressBooks t;
    t.m_size = 0;
    int select = 0;
    while (true)
    {
        showMenu();

        cin >> select;
        switch (select)
        {
        case 1:
            addperson(&t);
            break;
        case 2:
            showlist(&t);
            system("pause");
            break;
        case 3:
            deletePerson(&t);
            break;
        case 4:
            findPerson(&t);
            break;
        case 5:
            editPerson(&t);
            break;
        case 6:
            clearAll(&t);
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            return 0;
            break;
        }
    }
        system("pause");
        return 0;
}
运行结果及报错内容

报c6262请将一些数据移动到堆

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

试过将max设置为10就没有警告,尝试用new开辟内存不会写

我想要达到的结果

消除警告,学会开辟内存

  • 写回答

1条回答 默认 最新

  • 假装不困 2022-06-14 23:31
    关注

    欢迎采纳、点赞,关注,嘻嘻

    
    #include<iostream>
    using namespace std;
    #define max 1000
    
    void showMenu()
    {
        cout << "***************************" << endl;
        cout << "*****  1、添加联系人  *****" << endl;
        cout << "*****  2、显示联系人  *****" << endl;
        cout << "*****  3、删除联系人  *****" << endl;
        cout << "*****  4、查找联系人  *****" << endl;
        cout << "*****  5、修改联系人  *****" << endl;
        cout << "*****  6、清空联系人  *****" << endl;
        cout << "*****  0、退出通讯录  *****" << endl;
        cout << "***************************" << endl;
    }
    
    struct person
    {
        string name;
        string gender;
        int age = 0;
        string phone;
        string adress;
    
    };
    
    struct adressBooks
    {
        struct person *arr = NULL;
        int m_size = 0;
    };
    
    void addperson(adressBooks* p)
    {
        if (p->m_size == max)
        {
            cout << "通讯录已满无法继续添加" << endl;
            return;
        }
        else
        {
            cout << "请输入姓名:" << endl;
            string name;
            cin >> name;
            p->arr[p->m_size].name = name;
    
            cout << "请输入性别:" << endl;
            int gender;
            cout << "1----男" << endl;
            cout << "2----女" << endl;
            while (true)
            {
                cin >> gender;
                if (gender == 1 || gender == 2)
                {
                    string sex = gender == 1 ? "男" : "女";
                    p->arr[p->m_size].gender = sex;
                    break;
                }
                else
                {
                    cout << "输入错误请重新输入" << endl;
                }
            }
    
            cout << "请输入年龄:" << endl;
            int age = p->arr[p->m_size].age;
            cin >> age;
            p->arr[p->m_size].age = age;
    
            cout << "请输入电话:" << endl;
            string phone = p->arr[p->m_size].phone;
            cin >> phone;
            p->arr[p->m_size].phone = phone;
    
    
            cout << "请输入地址:" << endl;
            string adress = p->arr[p->m_size].adress;
            cin >> adress;
            p->arr[p->m_size].adress = adress;
    
            p->m_size++;
            cout << "添加完毕" << endl;
            system("pause");
            system("cls");
        }
    }
    
    void showlist(adressBooks* p)
    {
        if (p->m_size != 0)
        {
            for (int i = 0; i < p->m_size; i++)
            {
                cout << p->arr[i].name << "\t"
                    << p->arr[i].gender << "\t"
                    << p->arr[i].age << "\t"
                    << p->arr[i].phone << "\t"
                    << p->arr[i].adress << endl;
            }
        }
        else
        {
            cout << "记录为空" << endl;
        }
    }
    
    int isExist(adressBooks* p, string name)
    {
        for (int i = 0; i <= p->m_size; i++)
        {
            if (p->arr[i].name == name)
            {
                return i;
            }
        }
        return -1;
    }
    
    void deletePerson(adressBooks* p)
    {
        cout << "请输入您要删除的联系人:" << endl;
        string name;
        cin >> name;
        int ret = isExist(p, name);
        if (ret != -1)
        {
            for (int i = ret; i < p->m_size; i++)
            {
                p->arr[i] = p->arr[i + 1];
            }
            p->m_size--;
            cout << "删除成功" << endl;
        }
        else
        {
            cout << "查无此人" << endl;
        }
    }
    
    void findPerson(adressBooks* p)
    {
        cout << "请输入您要修改的联系人" << endl;
        string name;
        cin >> name;
        int ret = isExist(p, name);
        if (ret != -1)
        {
            cout << p->arr[ret].name << "\t"
                << p->arr[ret].gender << "\t"
                << p->arr[ret].age << "\t"
                << p->arr[ret].phone << "\t"
                << p->arr[ret].adress << endl;
        }
        else
        {
            cout << "查无此人" << endl;
        }
    }
    
    void editPerson(adressBooks* p)
    {
        cout << "请输入您要修改的联系人" << endl;
        string name;
        cin >> name;
        int ret = isExist(p, name);
        if (ret != -1)
        {
            cout << "请输入姓名:" << endl;
            string name;
            cin >> name;
            p->arr[ret].name = name;
    
            cout << "请输入性别:" << endl;
            int gender;
            cout << "1----男" << endl;
            cout << "2----女" << endl;
            while (true)
            {
                cin >> gender;
                if (gender == 1 || gender == 2)
                {
                    string sex = gender == 1 ? "男" : "女";
                    p->arr[ret].gender = sex;
                    break;
                }
                else
                {
                    cout << "输入错误请重新输入" << endl;
                }
            }
    
            cout << "请输入年龄:" << endl;
            int age = p->arr[p->m_size].age;
            cin >> age;
            p->arr[ret].age = age;
    
            cout << "请输入电话:" << endl;
            string phone = p->arr[p->m_size].phone;
            cin >> phone;
            p->arr[ret].phone = phone;
    
    
            cout << "请输入地址:" << endl;
            string adress = p->arr[p->m_size].adress;
            cin >> adress;
            p->arr[ret].adress = adress;
        }
        else
        {
            cout << "查无此人" << endl;
        }
    }
    
    void clearAll(adressBooks* p)
    {
        p->m_size = 0;
        cout << "联系人已清空" << endl;
    }
    int main()
    {
        adressBooks t;
        t.arr = new struct person[max];
        t.m_size = 0;
        int select = 0;
        while (true)
        {
            showMenu();
    
            cin >> select;
            switch (select)
            {
            case 1:
                addperson(&t);
                break;
            case 2:
                showlist(&t);
                system("pause");
                break;
            case 3:
                deletePerson(&t);
                break;
            case 4:
                findPerson(&t);
                break;
            case 5:
                editPerson(&t);
                break;
            case 6:
                clearAll(&t);
                break;
            case 0:
                cout << "欢迎下次使用" << endl;
                return 0;
                break;
            }
        }
        system("pause");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 修改了问题 6月14日
  • 创建了问题 6月14日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况