更改指针数组INSIDE另一个函数所包含的地址

时间:2015-08-06 10:30:21

标签: c++ arrays pointers

我有一组指针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;
}

更新:它不是this question的副本。我已经提到我知道如何通过引用传递数组来更改其元素,但在这种情况下,元素本身必须是由cudaMalloc()指定的指针。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作。我将数组作为参考传递,并使其适用于不同的数组大小,我已将其作为模板。用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;
}