我试图理解动态内存分配的概念。我编写了一些动态分配结构数组的代码。结构名称是数据,包含名称和卷号。它询问用户您想要输入多少次。输入数据后,应根据卷号搜索数据。搜索特定的卷号时会崩溃。以下是代码。
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;
}
答案 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的末尾删除它。无论如何它都会被释放。