如何修复分段故障(核心转储)?

时间:2018-02-08 05:01:21

标签: c++

这个程序编译得很好,但是我无法运行它。每当我尝试运行它时,我都会得到一个"分段错误(核心转储)"。我认为它与分配内存或声明数组有关。我试图用一个*声明数组,但后来它不会编译。我该如何解决?

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

2 个答案:

答案 0 :(得分:1)

请查看代码中的以下行

class_data.median = array [10] - &gt;均值;

在将内存分配给数组之前,您正尝试访问内存位置。

答案 1 :(得分:0)

就在这里:

class_data.median = array[10] -> mean;

您正在解除引用指向内存中实际位置的指针,因为您为指针数组调用malloc,然后在上述代码行中尝试取消引用数组后,为数组中的每个指针设置malloc。初始化每个学生指针后初始化中位数。

此外,由于您使用的是C ++,请使用new[]运算符,例如:

array = new student*[19];
编辑:语法