【发布时间】:2016-06-20 07:28:09
【问题描述】:
编辑:我对 c++ 和整个编程很陌生。
我应该制作一个使用结构和结构数组的程序。
安全理事会安全理事会成员
我的任务是使用“UML 聚合”的概念来创建一个我使用结构和结构数组的程序。 (希望你能明白我的意思)
由于安理会成员是安理会的一部分,而不是相反,因此安理会的结构必须有一个成员数组。(请耐心等待)
//example
struct Member_sc{
char * name;
int age;
};
struct Security_council{
Member_sc members[10];
};
现在,我已经创建了这个程序并且一切正常(根据我的老师),但现在她告诉我创建一个精确的副本,但我必须使用指向 Member_sc 的指针数组而不是“成员”数组结构。由于我还没有完全弄清楚指针是如何工作的,所以我遇到了一些问题。
如果需要,我可以将代码发布到原始程序,但它包含 4 个文件(主文件、头文件和一些函数文件),尝试在这里发布会很痛苦。
这是原型(目前全部在一个文件中)
#include <iostream>
using namespace std;
struct member_sc{
string name;
};
struct security_council{
member_sc *point;
security_council **search; // ignore this for now
int n;
security_council():n(0){}
};
void in_mem( member_sc &x){
getline(cin,x.name);
}
void out_mem(member_sc &x){
cout<<x.name<<endl;
}
void in_SC(security_council &q, member_sc &x){
int num; //number of members
cin>>num;
for(int i=0; i<num; ++i){
in_mem(x);
q.point[q.n]=x;
q.n++;
}
}
void out_SC(security_council &q,member_sc &x){
for(int i=0; i<q.n; ++i){
out_mem(q.point[i]);
}
}
int main(){
member_sc y;
security_council x;
in_mem(y); // works
out_mem(y); // works
in_SC(x,y); // crashes after i input the number of members i want
out_SC(x,y); //
system("pause");
return 0;
}
在您输入您希望加入安全理事会的成员数量后,程序会崩溃。 我的思维方式对吗?还是应该使用动态内存分配?
除此之外(我的老师给了我一个额外的任务)使用指针创建一个搜索功能。我认为指向指针的指针可能对此有好处,但我不确定。
任何帮助或建议将不胜感激。 (我想一旦我弄清楚指向结构的指针是如何工作的,我就会弄清楚搜索的东西)
【问题讨论】:
-
你知道
vector吗? -
你永远不会初始化
point成员引用的内存,但是在声明q.point[q.n]=x;中你尝试使用它。 -
@deviantfan 抱歉,没有
-
基本上,在您读入成员数量之后,在您读入各个成员的
for循环之前,您需要分配一个适当的数组member_sc对象的数量并将其存储在q.point中。使用完后不要忘记释放此内存。 -
一旦你这样做了,你还可以从
in_SC和out_SC中删除member_sc &x参数,因为这将变得不必要。此外,您的输入的一些验证似乎已经到位。考虑一下如果用户输入一个负数会发生什么,并且您尝试直接使用它来确定要分配的内存大小。
标签: c++ arrays pointers struct aggregation