Как я могу изменить указатели, переданные как часть списка переменных аргументов? - PullRequest
0 голосов
/ 19 апреля 2010

У меня есть функция, которая принимает переменное количество указателей, которые я хотел бы изменить.Это выглядит примерно так:

void myPointerModifyingFunction (int num_args, ... ) {
    void *gpu_pointer;
    char mem_type;

    va_list vl;
    va_start(vl,num_args);
    for (int i=0;i<num_args;i++) {
        gpu_pointer=va_arg(vl,void*);
        gpu_pointer = CUT_Malloc(100);
    }
}

функция CUT_Malloc выделяет память (на графическом процессоре с использованием CUDA) и возвращает адрес.Однако ясно, что я не использую этот адрес должным образом, так как gpu_pointer будет уничтожен в конце этой функции. Как я могу изменить указатели, переданные как часть списка переменных аргументов?

1 Ответ

1 голос
/ 19 апреля 2010

Указатели, которые вы передаете в функцию, становятся значениями параметров, то есть хранятся в стеке функций (архитектура по модулю), то есть подобны локальным переменным. Возможно, вам нужны двойные указатели, например, va_arg(vl,void**), и назовите их как myPointerModifyingFunction( 2, &ptr0, &ptr1 );.

Надеюсь, это поможет.

...