Проблема в выделении памяти для указателя структуры - PullRequest
0 голосов
/ 08 марта 2020

У меня есть структура t_REC_instance, и я хочу создать экземпляр и выделить память для его переменных. Я делаю что-то не так. В закомментированном пространстве выдает ошибку sigINT при отладке. Кто-нибудь может указать мне, что я делаю неправильно. c

typedef struct sAppRecipe
{
    union
    {
    struct sAppBread
        {
            int sugar_qty;
            int salt_qty;

        }tAppBread;
    struct sAppPancake
        {
            int sugar_qty1;
        }tAppPancake;
    };

}tAppRecipe;

typedef struct sAppRecipe tAppRecipe;


struct sREC_instance
{
    tAppRecipe *currentRecipe;
    tAppRecipe *newRecipe;
    tAppRecipe *updateRecipe;
};
typedef struct sREC_instance t_REC_instance;






tAppRecipe *REC_Alloc(void) {
    return malloc(sizeof (tAppRecipe));
}

t_REC_instance *instance;   // 

int REC_createInstance1(t_REC_instance *instance)
{

    instance->currentRecipe =REC_Alloc();      // there is a problem here
    if (!instance->currentRecipe)
        {
            printf("not allocated");
        }
}



void main()
{
REC_createInstance1(instance);
}

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Исправление:

Ваш код назначает член currentRecipe структуры, на которую указывает instance, но instance не имеет значения, то есть указывает к некоторой неверной части памяти, которая вызывает ошибку.

Измените эту строку:

t_REC_instance *instance;

на

t_REC_instance instance;

и эту строку:

REC_createInstance1(instance);

до

REC_createInstance1(&instance);
1 голос
/ 08 марта 2020

Строка

instance->currentRecipe =REC_Alloc();

является проблемой, поскольку вы получаете доступ к currentRecipe члену instance, который не существует; instance никуда не указывает, поэтому вам нужно сначала выделить его:

instance = malloc(sizeof(t_REC_instance));

...