Передача указателя структуры на функции - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь понять кусок кода. У меня есть структура, и я создаю переменную структуры глобально, и я передаю адрес созданной переменной структуры различным функциям. в REC_createInstance я назначаю значение oil_qty как 5. в REC_testInstance я пытаюсь прочитать значение oil_qty, например) В этом случае это работает. когда создается структурная переменная. и значения, присвоенные переменным структуры внутри функции, сохраняются через программу.


t_REC_instance instance;
void main()
{
REC_createInstance(&instance);
REC_testInstance(&instance);
}

Но в приведенном ниже коде, когда создается указатель структуры, и я передаю его функции, я не могу прочитать значение oil_qty в REC_testInstance, которое было присвоено в REC_createInstance.

t_REC_instance *instance;   //  structure pointer is created

void main()
{
REC_createInstance(instance);
REC_testInstance(instance);
}
int REC_createInstance(t_REC_instance* instance)
{


    instance = malloc(sizeof(t_REC_instance));  //code needed when structure pointer is created

    instance->currentRecipe =REC_Alloc();
    if (!instance->currentRecipe)
        {
        return -5;
            //BEF_EHJ_LOG(-5, destroy_ctx);
        }
        instance->currentRecipe->tAppBread.oil_qty=5;

    return 0;
    destroy_ctx:
    return -5;
}


int REC_testInstance(t_REC_instance* instance)
{


    int var=instance->currentRecipe->tAppBread.oil_qty;


}

Что происходит при создании указателя структуры? почему я не могу прочитать значение oil.qty, заданное в REC_createInstance, в другой функции? Спасибо за обмен знаниями.

1 Ответ

0 голосов
/ 09 марта 2020

В REC_createInstance вы изменяете instance, который является параметром функции. Изменение параметра не отражается в вызывающей функции.

Вам необходимо передать адрес переменной, которую вы хотите изменить, и соответственно разыменовать внутри функции.

Итак, ваша функция будет выглядеть так:

int REC_createInstance(t_REC_instance **instance)
{
    *instance = malloc(sizeof(t_REC_instance)); 
    (*instance)->currentRecipe =REC_Alloc();
    ...

И вы называете это так:

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