Hello everyone,
here is my code ,the problem is why When i run this function the data int * indx and int *begin and int *end the value of them will change . and i only change the int * output in code . how to change my code then ?
extern “C” global
void caul_dis(double datax,double datay,double * dataz,int outdata,int indx,int begin,intend,int size,double minx, double maxx, double miny, double maxy, double minz, double maxz,int d_neib,double disd,int com_dis)
{
int * tmp;
int i = blockIdx.xblockDim.x + threadIdx.x;
int dimx = (maxx - minx)/disd+2;
int dimy = (maxy - miny)/disd+2;
int dimz = (maxz - minz)/disd+1;
int idxz = (dataz[i]-minz)/disd;
int idxy = (datay[i]-miny)/disd;
int idxx = (dataz[i]-minx)/disd;
int idx = idxz*dimy*dimx+dimx*idxy+idxx;
int ibegin = begin[idx];
int iend = end[idx];
bool b_mov =false;
if(ibegin>iend||ibegin==-1||iend==-1)
{
b_mov = true;
}
if(!b_mov)
{
int num=0;
for(int j=ibegin;j<=iend;j++)
{
int dataindx = indx[j];
double distance = sqrt(((dataz[i]-dataz[dataindx])*(dataz[i]-dataz[dataindx]))+((datay[i]-datay[dataindx])*(datay[i]-datay[dataindx]))+((datax[i]-datax[dataindx])*(datax[i]-datax[dataindx])));
if(distance<disd)
{
num++;
}
if(num>=com_dis)
{
outdata[i]= 0;
j= iend+1;
}
}
if(num<=com_dis)
{
outdata[i]= 1;
}else if(num>com_dis)
{
outdata[i]= 0;
}
}
};