一个让我极其郁闷的问题

我用VC 建立了一个MFC工程,基于对话框的程序,在这个工程中使用CUDA
整个工程有两个.CU文件,一个文件是KERNEL函数的,另一文件是调用KERNEL函数,并且负责空间的分配
其中的函数被写成了 extern “C” 函数,可以被其他CPP调用

其中一个函数代码如下

extern “C” void RebuildData(BYTE *pbhostSrcVctr, int iVctrNum, BYTE *pbdivSrcVctr, int iDivSrcVctrHeight, float *pddivPCVctr, int iVctrDim, int iBlockSize,
int iPCBlockPitch, float *pddivRet, float *pdhostRet, int iChannel, int iSrcVctrValidR, int iPCVctrValidC, int *pRend)
{
cudaStream_t *pStream = new cudaStream_t[iVctrNum];
for (int i = 0; i < iVctrNum; i++)
{
cudaStreamCreate(&pStream[i]);
}

int iShareSize = iChannel * (iBlockSize * iBlockSize * sizeof(float) + iBlockSize * iBlockSize * sizeof(BYTE));
int idSrcOffset = iChannel * iBlockSize * iVctrDim;
int ihSrcOffset = iChannel * iVctrDim;
int idPCOffset = iChannel * iVctrDim * iPCBlockPitch;
int idReOffset = iChannel * iBlockSize * iPCBlockPitch;

//拷贝数据到显存
for (int i = 0; i < iVctrNum; i++)
{
CUDA_SAFE_CALL(cudaMemcpy2D(pbdivSrcVctr + pRend[i] * idSrcOffset, sizeof(BYTE) * iVctrDim, pbhostSrcVctr + pRend[i] * ihSrcOffset,
sizeof(BYTE) * iVctrDim, sizeof(BYTE) * iVctrDim, 1, cudaMemcpyHostToDevice));

CUDA_SAFE_CALL(cudaMemcpy2D(pbdivSrcVctr + pRend[i] * idSrcOffset + iBlockSize * iVctrDim, sizeof(BYTE) * iVctrDim,
pbhostSrcVctr + pRend[i] * ihSrcOffset + iVctrDim, sizeof(BYTE) * iVctrDim, sizeof(BYTE) * iVctrDim,
1, cudaMemcpyHostToDevice));

CUDA_SAFE_CALL(cudaMemcpy2D(pbdivSrcVctr + pRend[i] * idSrcOffset + 2 * iBlockSize * iVctrDim, sizeof(BYTE) * iVctrDim,
pbhostSrcVctr + pRend[i] * ihSrcOffset + 2 * iVctrDim, sizeof(BYTE) * iVctrDim, sizeof(BYTE) * iVctrDim,
1, cudaMemcpyHostToDevice));
}

dim3 grid(iPCBlockPitch / iBlockSize, iBlockSize / iBlockSize * 3);
dim3 block(iBlockSize, iBlockSize);

for (int i = 0; i < iVctrNum; i++)
{
KernelFun<<<grid, block, iShareSize, pStream[i]>>>(pbdivSrcVctr + pRend[i] * idSrcOffset, iVctrDim, iVctrDim, iBlockSize, pddivPCVctr + pRend[i] * idPCOffset, iPCBlockPitch, iPCBlockPitch, iVctrDim,
pddivRet + pRend[i] * idReOffset, iPCBlockPitch, iPCBlockPitch, iBlockSize, iSrcVctrValidR, iPCVctrValidC, iBlockSize, iChannel);
cudaThreadSynchronize();
}

CUDA_SAFE_CALL(cudaMemcpy2D(pdhostRet, iPCBlockPitch * sizeof(float), pddivRet, iPCBlockPitch * sizeof(float), iPCVctrValidC * sizeof(float), iVctrDim * iChannel * iVctrNum, cudaMemcpyDeviceToHost));
}

我在DEBUG模式下运行,出现一个让我极其郁闷的问题,我百思不得其解,其中有一个传进来的参数iPCBlockPitch, 在我程序中被赋值为64
最开始执行的时候都没问题
[attach]655560[/attach]
执行到这一步都是正常的
但是一旦往下走,极其奇怪的事情就发生了
[localimg=400,221]2[/localimg]
里面的两个变量,iVctrDim和iBlockSize被无故分别自动改成了0和65535,再往下执行,很多变量都被改变了。
导致整个程序无法正确执行。我实在搞不明白,这到底是怎么回事啊?怎么变量无故被修改了啊?请各位高手帮助我