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

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日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题