为什么这段程序崩溃了呢

为什么这段程序会崩溃呢


```c++
#include 
#include 
using std::string;
struct  ROLE
{
    string id;
        int exp;
};
int main()
{
    int count=0;
    int s_begin_id=0;
    int s_end_0=0;
    string strData="id=tonyclare;exp=9532;id=sunny;exp=4214;id=simplle;exp=2134;id=tom;exp=234;";
    for (int i=0;iif (strData[i]==';')
        {
            count++;
        }
    }
    count=count/2;
    struct ROLE *pRole=new ROLE[count];
    for (int i=0;is_begin_id=strData.find("id=",s_begin_id);
    int s_end_0=strData.find(";",s_begin_id);
    string strOut_id=strData.substr(s_begin_id+3,s_end_0-s_begin_id-3);
    pRole[i].id=strOut_id;
    s_begin_id=s_begin_id+3;
    std::cout<"pause");
    return 0;
}

```

int s_begin_id=strData.find("id=",s_begin_id);
    int s_end_0=strData.find(";",s_begin_id);
这两行错了啊, 这两个变量在main开头部分已经定义了,这里不要再定义一次啊,去掉开头的int就好了

在此程序中,使用了一个指向结构体数组的指针,但是在为指针分配内存时,没有使用 [] 运算符,导致分配的内存不足,因此程序会崩溃。另外,在字符串中查找子字符串时,需要注意起始位置的设置,否则可能会出现错误的结果。

以下是修改后的代码:

#include <iostream>
#include <string>
using std::string;
struct ROLE
{
    string id;
    int exp;
};
int main()
{
    int count = 0;
    int s_begin_id = 0;
    int s_end_0 = 0;
    string strData = "id=tonyclare;exp=9532;id=sunny;exp=4214;id=simplle;exp=2134;id=tom;exp=234;";
    for (int i = 0; i < strData.length(); i++)
    {
        if (strData[i] == ';')
        {
            count++;
        }
    }
    count = count / 2;
    struct ROLE* pRole = new ROLE[count]; // 为指针分配内存时使用 [] 运算符
    for (int i = 0; i < count; i++)
    {
        int s_begin_id = strData.find("id=", s_begin_id);
        int s_end_0 = strData.find(";", s_begin_id);
        string strOut_id = strData.substr(s_begin_id + 3, s_end_0 - s_begin_id - 3);
        pRole[i].id = strOut_id;
        s_begin_id = s_end_0 + 1; // 修改起始位置
        std::cout << pRole[i].id << std::endl;
    }

    delete[] pRole; // 在程序结束时释放指针所指向的内存
    system("pause");
    return 0;
}