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; 

私のプログラムは最初のレコードにアクセスしますが、2 番目のレコードの最初のフィールドにアクセスした後にクラッシュします。なぜ最初のレコードで機能するのかわかりませんが、2番目のレコードの途中で死ぬのですか? 構造に正しくアクセスしていますか?

ありがとうございました。

4

2 に答える 2

2

new配列を割り当てるには、角括弧付きの配列形式が必要です。

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

配列のサイズは、動的に決定される量にすることができます。

于 2012-04-28T22:16:43.443 に答える
0

配列にメモリを割り当てているのではなく、1 つの要素にのみ割り当てています。

誰かがコメントで言ったように、鍵はnew Grades指示にあります

さらに、以前に別の変数を宣言していない限り(これは悪い習慣です)、変数が見つからないiため、そのコードはコンパイルされません。(art1301 + i)->studentName = names[i];i

于 2012-04-28T22:11:37.627 に答える