Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中的堆上创建结构数组+;_C++_Arrays_Heap_Structure - Fatal编程技术网

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。我认为这是声明结构的错误方法,但每次我试图编辑它时,编译器都拒绝了。谢谢。添加数组大小使整个程序正常工作。我的作业现在完成了。