Изменение одного объекта структуры изменяет все объекты структуры одного типа.Как я могу это исправить? - PullRequest
0 голосов
/ 20 апреля 2019

Я создаю «Программу решения Диллемы», в которую пользователь вводит дилемму и добавляет причины PRO и CON. PRO и CON управляются структурой с именем reasonList, а причины PRO хранятся в структуре proList, а причины CON хранятся в структуре conList следующим образом:

typedef struct reasonList
{
    char** reasons;
    int numReasons;
}reasonList;

int main(void)
{
    reasonList proList;
    reasonList conList;
        // Rest of code...
}

У меня есть функция, которая инициализирует списки следующим образом:

void initRList(reasonList* list)
{
        // Makes an array of strings
    list->reasons = (char**)malloc(sizeof(char*));
    list->numReasons = 0;
}

и у меня есть функция, которая обновляет каждую новую причину, добавляемую в списки:

void updateRList(reasonList* list, char* newReason) 
{
    list->reasons = (char**)realloc(list->reasons, sizeof(char*) * (list->numReasons+1));
    list->reasons[list->numReasons] = (char*)malloc(sizeof(char) * strlen(newReason));
    list->reasons[list->numReasons] = newReason;
    list->numReasons++;
}

Моя проблема в том, что каждый раз, когда я запускаю функцию updateRList для добавления причины в список причин, она добавляет причину в конец списка, который я запрашивал, но изменяет все причины (conList и proList) на последнюю причину, которая была вошел тоже. Пример:

ввод:

Input

Печать списков:

Lists print

Вот как я отправляю списки и причину функции updateRList:

switch (choice)
        {
        case ADD_PRO_CHOICE:
            printf("Enter a reason to add to list PRO:\n");
            fgets(reason, STR_LEN, stdin);
            reason[strlen(reason) - 1] = '\0';
            updateRList(&proList, reason);
            break;
        case ADD_CON_CHOICE:
            printf("Enter a reason to add to list CON:\n");
            fgets(reason, STR_LEN, stdin);
            reason[strlen(reason) - 1] = '\0';
            updateRList(&conList, reason);
            break;
         }

Я пытаюсь решить эту проблему уже несколько часов и не могу найти, как это исправить, я был бы рад, если кто-то здесь может помочь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...