结构体内指针数组的复制

//这个是定义的结构体
struct HostDocs{
unsigned DocCount;
unsigned short DocStreamSize[DOC_BATCH_SIZE];
unsigned short *DocStream[DOC_BATCH_SIZE];
};

//hdocs 这个是HostDocs 类型,已包含数据。想将其copy到 设备端的 ddocs中
//copy代码如下
HostDocs ddocs;
unsigned short CPU_ARRAY = (unsigned short)malloc(sizeof(unsigned short
)*DOC_BATCH_SIZE);
memset(CPU_ARRAY,0,sizeof(int)*DOC_BATCH_SIZE);

int docSize=0,docsNum=hdocs->DocCount;
for(int i=0;i<docsNum;i++){
docSize=hdocs->DocStreamSize[i];
cutilSafeCall( cudaMalloc( (void **)&CPU_ARRAY[i],sizeof(unsigned short)docSize));
cutilSafeCall( cudaMemset(CPU_ARRAY[i],0,sizeof(unsigned short)
(docSize)));
cutilSafeCall( cudaMemcpy(CPU_ARRAY[i],hdocs->DocStream[i],sizeof(unsigned short)*docSize,cudaMemcpyHostToDevice));
}

cutilSafeCall(cudaMalloc( (void**)&ddocs,sizeof(HostDocs)));
cutilSafeCall(cudaMemcpy(ddocs->DocStream,CPU_ARRAY,sizeof(unsigned short*)*DOC_BATCH_SIZE,cudaMemcpyDeviceToDevice));
cutilSafeCall(cudaMemcpy(ddocs,hdocs,sizeof(HostDocs),cudaMemcpyHostToDevice));

在最后一行debug自动退出。

请高人指点,该如何copy好!
多谢!

[ 本帖最后由 sebarzi 于 2010-9-6 17:44 编辑 ]