在另一个函数内部改变指针数组所包含的地址

Changing the address contained by an array of pointer INSIDE an another function

本文关键字:包含 地址 数组 指针 另一个 函数 内部 改变      更新时间:2023-10-16

我有一个指针数组unsigned char *dev_src[2];。实际上,这些指针必须指向cudaMalloc()分配的内存。

我能够获得分配内存的地址,如果我使用以下代码在main()内做:

//Inside the same function
int memsize = 100;
int main()
{
    unsigned char *dev_src[2];
    //Allocate memomry 
    for (int i = 0; i < numCudaStreams; i++)
    {
        cudaMalloc((void**)&dev_src[i], memsize);
    }
    return 0;
}

问题:我想在另一个函数中获得分配的内存地址,我需要将这个指针数组传递给该函数。我已经知道如何将数组传递给另一个函数并在其内部进行更改,但在这种情况下,我无法获得正确的方法。

//Inside another function
int memsize = 100;
void memallocation(unsigned char ????)
{
    //Allocate memomry 
    for (int i = 0; i < numCudaStreams; i++)
    {
        cudaMalloc((void**)??????????, memsize);
    }
}
int main()
{
    unsigned char *dev_src[2];  
    //Initialization of pointers before passing them to a function
    for (int i = 0; i < 2; i++)
        *dev_src[i] = NULL;
    memallocation(&dev_src);
    return 0;
}

UPDATE:这不是这个问题的重复。我已经提到,我知道如何通过引用传递数组来改变它的元素,但在这种情况下,元素本身必须是由cudaMalloc()分配的指针。

您可以执行如下操作。我传递数组作为参考,并使其适用于不同的数组大小,我已将其作为模板。用cudaMalloc替换内存分配行

template<int N>
void memallocationA(unsigned char *(&arr)[N])
{
    //Allocate memomry 
    for (int i = 0; i < N; i++)
    {
        //cudaMalloc((void**) &arr[i] , memsize);
        arr[i] = new unsigned char[10];
    }
}
int main()
{
    unsigned char *dev_src[2];
    //Initialization of pointers before passing them to a function
    for (int i = 0; i < 2; i++)
        dev_src[i] = NULL;
    memallocationA(dev_src);
    return 0;
}