在C ++中用堆创建结构数组

时间:2012-04-28 22:08:23

标签: 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++ )
(art1301 + i)->scores[j] = exams[i][j];

(art1301 + i)->average = average; 

我的程序访问第一条记录,但在访问第二条记录的第一个字段后崩溃。我不明白为什么它适用于第一个记录,但在第二个记录中死了?我是否正确访问了结构?

谢谢。

2 个答案:

答案 0 :(得分:2)

要分配数组,您需要new的数组形式,方括号:

Grades *art1301 = new Grades[200];
//                          ^^^^^

数组大小可以是动态确定的数量。

答案 1 :(得分:0)

您没有为数组分配内存,只为一个元素分配。

正如有人在评论中所说,关键在于new Grades指令

此外,除非您之前声明了另一个i变量(这是一种不好的做法),否则该代码无法编译,因为(art1301 + i)->studentName = names[i];将找不到变量i