Как я могу освободить только часть массива, используя указатели в C? - PullRequest
0 голосов
/ 09 апреля 2020

Моя программа содержит записи, которые включают имя, фамилию и оценку. Мне нужно написать функцию, которая позволяет пользователю вводить фамилию и удаляет любую запись с этой фамилией. Я могу использовать только указатели и простые функции выделения памяти. Например, мои записи могут выглядеть примерно так:

Smith, Will, 63

Crews, Terry, 30

Brady, Tom, 92

Формат здесь - lastName, Имя, оценка. У меня есть два двумерных массива для хранения всех имен и массив с плавающей запятой для хранения результатов. Если пользователь хочет удалить какую-либо запись с фамилией «Экипаж», моей программе нужно будет удалить все имя и счет, связанный с этой фамилией. Поэтому мой список записей будет выглядеть так:

Smith, Will, 63

Brady, Tom, 92

Вот то, что у меня сейчас есть.

void delete_record(int size, char** firstName, char** lastName, float* score)
{
    int x;
    char *target = (char *)malloc(20 * sizeof(char));
    printf("Enter a last name. \n");
    printf("Any students with that last name will have their record deleted. \n");
    scanf("%s", target);

    for(x=0;x<size;x++)
    {
        if(strcmp(target, lastName + (x*15)) == 0)
        {            
            free(firstName);
            free(lastName);
            free(score);            
        }
    }
}

Правка для отображения определяемых массивов

char **lastName = (char **)malloc(numOfRecords * sizeof(char));

numOfRecords предоставляется пользователем для определения размера списка.

...