непересекающаяся проблема с динамически выделяемой памятью - PullRequest
0 голосов
/ 29 марта 2019

Я знаю, что мой код груб, но программа работает так, как я хочу, но у меня проблема с выходом из программы.Я думаю, что проблема со свободным (массив), чтобы освободить выделенную память.Может кто-нибудь объяснить, в чем дело, и опубликовать исправление для этих нескольких строк?

int main() {
        int choice;
        STUDENT *array;
        int size = 0;
        int counter = 0;
        int i, j;
        srand((unsigned)time(NULL));

        printf("\n\tEnter the size for the array: \n");
        scanf_s("%i", &size);

        array = malloc(size, sizeof(STUDENT));

        if (array == NULL) {
            printf("Error Allocated Memory\n");
            PAUSE;
            exit(-1);
        }//End If
        else {
            printf("The Memory Has Been Allocated\n");
            PAUSE;
        }//end Else

        //Enter elements into the array
        for (i = 0; i < size; i++) {
            printf("\nPlease enter a student ID number: ");
            scanf("%d", &array->stuId[i]);
            //populate grades for each stuID
            for (j = 0; j < size; j++) {
                array->exam1[j] = rand() % 100;
                array->exam2[j] = rand() % 100;
                array->exam3[j] = rand() % 100;
                array->exam4[j] = rand() % 100;
            }
        }

        do {
            choice = getChoice();
            switch (choice) {

            case 1: //Display All Student Records
                studentRecords(*array, size);
                break;
            case 2: //Display Student Average
                displayAve(array, size);
                break;
            case 3: //Quit
                printf("\n\tThank You For Using The Program\n");
                PAUSE;
                break;
            default:
                printf("\n\tERROR-- Try Again...\n");
                PAUSE;
                break;
            }
        } while (choice != 3);

        free(array);
        exit(-1);
    }//End Main

1 Ответ

0 голосов
/ 29 марта 2019
array = malloc(size, sizeof(STUDENT));

Malloc не принимает 2 параметра, только количество байтов для выделения. Два решения:

array = calloc(size, sizeof(STUDENT));

Обратите внимание, что calloc инициализирует все ваши байты равными 0, или вы можете использовать

array = malloc(size * sizeof(STUDENT));
...