0

我需要在堆上声明一个结构数组,然后将数据从堆栈上的并行数组和计算传输到每个结构中。我宣布

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; 

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

谢谢你。

4

2 回答 2

2

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

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

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

于 2012-04-28T22:16:43.443 回答
0

您不是为数组分配内存,而是仅为一个元素分配内存。

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

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

于 2012-04-28T22:11:37.627 回答