函数返回错误的值

时间:2014-11-15 16:12:55

标签: c

    #include <stdio.h>
    #include <stdlib.h>

    float average_score(int** array_score)
    {
        int i, j;
        int sum = 0;

        for(i = 0; i < 4; i++)
            {
                for(j = 0; j < 4; j++)
                    {
                        sum += *(*(array_score + i) + j);
                    }
            }

        printf("sum / 16 = %d\n", sum / 16);
        return (float) sum / 16;
    }

    int lowest_score(int** array_score)
    {
        int i, j;
        int temp = **array_score;

        for(i = 0; i < 4; i++)
            {
                for(j = 0; j < 4; j++)
                    {
                        if(temp > *(*(array_score + i) + j))
    //------
                            temp = *(*(array_score + i) + j);
                        printf("%d  ",*(*(array_score + i) + j));
                    }
//--
                printf("\n");
            }

        printf("low_score = %d\n", temp);
        return temp;
    }

    int main(int argc, char** argv)
    {
        int **array_score = NULL;

        int i = 0;
        int j = 0;

        //Create a two-dimensional array
        array_score = (int **) malloc(4 * sizeof(int *));
        for(i = 0; i <= 4; i++)
            array_score[i] = (int *)malloc(4 * sizeof(int));
//--     
        for(i = 0; i < 4; i++)
            {
                printf("Please enter the student_%d four grades, (separated with a space )\n", i+1);
                int ret = scanf("%d %d %d %d", (*(array_score + i) + 0), (*(array_score + i) + 1),
                                (*(array_score + i) + 2), (*(array_score + i) + 3));
                fflush(stdin);
                if(4 != ret)
                    i--;
            }

        //There is something wrong with the function return value
        float ave_score = average_score(array_score);
//--
        int low_score = lowest_score(array_score);

        //The output
        printf("average score: %d\n lowest score: %d\n", ave_score, low_score);

        return 0;
    }

1 个答案:

答案 0 :(得分:1)

这为4个指针分配空间然后写入5,因为i采用值0,1,2,3和4:

    array_score = (int **) malloc(4 * sizeof(int *));
    for(i = 0; i <= 4; i++)
        array_score[i] = (int *)malloc(4 * sizeof(int));

请注意,在C中,您不应该从malloc转换返回值。 Stackoverflow上有一个答案,说明为什么这没有帮助。