Не удалось получить содержимое указателя в C - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующие операторы в программе на C, и они не могут быть изменены:

struct struct_handle;
struct struct_handle *com_Connect(const char *val1, void *priv, int timeout_msec, enum com_ErrorCodes *com_errno);

Я создаю эту функцию:

void foo(struct_handle *handle)
{
    enum com_ErrorCodes com_errno;

    do
    {
        handle = com_Connect("val1", NULL, 10000, &com_errno);

        if(handle == NULL) 
        {
            //ERROR handle is NULL
        }
    }
    while(handle == NULL);

    //HERE handle is not NULL
}

Это основная функция:

int main(int argc, char const *argv[])
{
    struct struct_handle *handle;

    foo(handle);

    if(handle == NULL)
    {
        //ALWAYS handle IS NULL
    }

    return 0;
}

Функция, которую я создаю foo (), состоит в том, чтобы отправить «дескриптор» и получить его, как только он отличается от NULL, я знаю, что он отличается от NULL, потому что функция возвращает, и я проверил содержимое внутрифункция.Проблема в том, что когда я хочу занять этот «дескриптор» за пределами функции, он всегда говорит мне, что он равен NULL, что заставляет меня думать, что проблема в том, что когда я возвращаюсь из функции, я неправильно получаю содержимое указателя.Как правильно его получить?

1 Ответ

0 голосов
/ 01 марта 2019

В C все параметры функции передаются по значению.Это означает, что любые изменения параметра handle в foo не отражаются в вызывающей функции.

Вы должны изменить foo, чтобы вернуть struct_handle * и присвоить его handle в main.

Измените функцию на:

struct_handle *foo()
{
    enum com_ErrorCodes com_errno;
    struct_handle *handle;

    do
    {
        handle = com_Connect("val1", NULL, 10000, &com_errno);

        if(handle == NULL) 
        {
            //ERROR handle is NULL
        }
    }
    while(handle == NULL);

    return handle;
}

И назовите ее так:

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