如何修改作为变量参数列表的一部分传递的指针?

时间:2010-04-19 16:54:54

标签: pointers memory-management cuda variadic-functions

我有一个函数,它需要可变数量的指针,我想修改它。它看起来像:

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上)并返回地址。但很明显我没有正确使用这个地址,因为gpu_pointer将在此函数结束时被销毁。 如何修改作为变量参数列表的一部分传递的指针?

1 个答案:

答案 0 :(得分:1)

传递给函数的指针变为参数值,即存储在函数堆栈(模结构)上,即类似于局部变量。您可能需要双指针,例如va_arg(vl,void**),并将其称为myPointerModifyingFunction( 2, &ptr0, &ptr1 );

希望这有帮助。