使用struct的动态内存分配

时间:2018-05-24 09:10:48

标签: c++ visual-c++

我试图理解动态内存分配的概念。我编写了一些动态分配结构数组的代码。结构名称是数据,包含名称和卷号。它询问用户您想要输入多少次。输入数据后,应根据卷号搜索数据。搜索特定的卷号时会崩溃。以下是代码。

struct data
    {
        char name[50];
        int roll; float cgpa; char camp[3]; 

    };
    int main()
    {

        data *p;

        int i;
        cout << "how many times you want to enter data? "; cin >> i;
        p = new data[i];

        for (int k = 0; k < i; k++)

        {

            cout << "Enter your name:";
            cin >> p[k].name;

            cout << "Enter your roll number:";
            cin >> p[k].roll;

            cout << endl<<endl;
            p++;
        }
        int r;
        cout << "enter roll number to search for :"; cin >> r;
        for (int j = 0; i < i; j++){

        if (p[j].roll == r)
        {
            cout << "Roll number:" << p[j].roll << endl; cout << "Name:" << p[j].name << endl;

        }
        else{
            cout << "Not found!" << endl;
            break;
        }
    }
        delete []p;
        return 0;
    }

2 个答案:

答案 0 :(得分:2)

在此代码中:

for (int k = 0; k < i; k++)   

{

    cout << "Enter your name:";
    cin >> p[k].name;

    cout << "Enter your roll number:";
    cin >> p[k].roll;

    cout << endl<<endl;
    p++;
}

您正在递增指向访问的指针和索引以访问指针,这样您就可以到达内存中。

通过索引或指针/迭代器迭代。

答案 1 :(得分:-1)

p是数组。它指向新Data [i]保留的数据的开始。

一旦你增加它,它就不再指向开始了。

只需删除增量p ++语句就可以了。

顺便说一下,没有必要在main的末尾删除它。无论如何它都会被释放。