这个程序编译得很好,但是我无法运行它。每当我尝试运行它时,我都会得到一个"分段错误(核心转储)"。我认为它与分配内存或声明数组有关。我试图用一个*声明数组,但后来它不会编译。我该如何解决?
struct classStats
{
float mean;
float min;
float max;
float median;
char *name;
};
int main ()
{
int i=19;
string line;
classStats class_data;
student **array;
float count;
class_data.max = 100;
class_data.min = 0;
class_data.median = array[10] -> mean;
array = (student**) malloc(i* sizeof(student*));
cin >> line;
for (int j=0; j<i; j++)
{
array[j] = (student*) malloc(sizeof(student));
cin >> array[j] -> first;
cin >> array[j] -> last;
cin >> array[j] -> exam1;
cin >> array[j] -> exam2;
cin >> array[j] -> exam3;
array[j] -> mean = ((array[j]-> exam1 + array[j] -> exam2 + array[j] -> exam3) / 3);
cout << array[j] -> mean;
} // end of for
bubble(array, i);
count = 0;
for (int j=0; j<i; j++)
{
count = count + array[j]->mean;
if(array[j]-> mean < class_data.min)
{
class_data.min = array[j]->mean;
}//end of if
else if(array[j]->mean < class_data.max)
{
class_data.max = array[j]->mean;
} // end of else if
}
class_data.mean = count / i;
cout << line << class_data.mean << class_data.min << class_data.max << class_data.mean;
for (int j=0; j<19; j++)
{
cout << *array[j]->first << *array[j]->last << array[j]->mean << endl;
}
free(array);
return 0;
} // end of main
答案 0 :(得分:1)
请查看代码中的以下行
class_data.median = array [10] - &gt;均值; 强>
在将内存分配给数组之前,您正尝试访问内存位置。
答案 1 :(得分:0)
就在这里:
class_data.median = array[10] -> mean;
您正在解除引用指向内存中实际位置的指针,因为您为指针数组调用malloc,然后在上述代码行中尝试取消引用数组后,为数组中的每个指针设置malloc。初始化每个学生指针后初始化中位数。
此外,由于您使用的是C ++,请使用new[]
运算符,例如:
array = new student*[19];
编辑:语法