C++ 在C+中的堆上创建结构数组+;
我需要在堆上声明一个结构数组,然后将数据从堆栈上的并行数组和计算传输到每个结构中。我宣布C++ 在C+中的堆上创建结构数组+;,c++,arrays,heap,structure,C++,Arrays,Heap,Structure,我需要在堆上声明一个结构数组,然后将数据从堆栈上的并行数组和计算传输到每个结构中。我宣布 struct Grades { string studentName; int scores[4]; double average; }; .... Grades *art1301 = new Grades; .... (art1301 + i)->studentName = names[i]; for((int i = 0 ; i < 5 ; i+
struct Grades
{
string studentName;
int scores[4];
double average;
};
....
Grades *art1301 = new Grades;
....
(art1301 + i)->studentName = names[i];
for((int i = 0 ; i < 5 ; i++ )
(art1301 + i)->scores[j] = exams[i][j];
(art1301 + i)->average = average;
结构等级
{
字符串studentName;
智力得分[4];
双倍平均;
};
....
等级*art1301=新等级;
....
(art1301+i)->studentName=姓名[i];
for((int i=0;i<5;i++)
(art1301+i)->分数[j]=考试[i][j];
(art1301+i)->平均值=平均值;
我的程序访问第一个记录,但是它在访问第二个记录的第一个字段后崩溃了。我不明白为什么它对第一个记录工作,但是在第二个记录中死亡?我是否正确访问了结构?< /P>
谢谢。您不是为数组分配内存,而是只为一个元素分配内存 正如有人在评论中所说,关键在于
新等级
说明
此外,除非您之前声明了另一个
i
变量(这是一种糟糕的做法),否则该代码不会编译,因为(art1301+i)->studentName=names[i];
将找不到变量i
来分配数组,您需要new
的数组形式,带有方括号:
Grades *art1301 = new Grades[200];
// ^^^^^
数组大小可以是动态确定的数量。这里有一个提示:这是错误的(出于您的目的):
Grades*art1301=new Grades;
您在堆上只声明了一个Grades结构。您没有为多个Grades结构分配足够的内存,因此可能会导致写入冲突。若要在堆上处理一个以上的Grades,则应进行此更改Grades*art1301=new Grades[i+1]
,其中我假设I+1是您要分配的结构数。请不要使用指针算术对数组进行索引。请使用索引运算符[]
。谢谢你,Alex。我认为这是声明结构的错误方法,但每次我试图编辑它时,编译器都拒绝了。谢谢。添加数组大小使整个程序正常工作。我的作业现在完成了。