给结构赋值时的访问冲突写入位置



我试图在循环中给2D结构体一个值,但我不断获得访问违反写入位置错误我的代码是:

typedef struct {
int prtcls[10],numb;
} intpos;
int main(int argc, char** argv)
{
particle_t* particles;
intpos** points = new intpos*[(int)SCALE];
for (int i = 0; i < (int)SCALE; i++) {
intpos* row = new intpos[(int)SCALE - 1];
points[i] = row;
}
cudaMallocHost(&particles, sizeof(particle_t)*NUM_PARTICLES);
// Random initial positions / directions.
for (int i = 0; i < NUM_PARTICLES; i++)
{
particles[i].x =( (float)rand() / (float)RAND_MAX) * SCALE ;
particles[i].y = ((float)rand() / (float)RAND_MAX) * SCALE;
particles[i].phi = ((float)rand() / (float)RAND_MAX) * 2 * 3.14;
particles[i].flrx = floor(particles[i].x) ;
particles[i].flry = floor(particles[i].y) ;
int fx = particles[i].flrx;
int fy = particles[i].flry;
points[fx][fy].numb += 1;
int curn = points[fx][fy].numb;
points[fx][fy].prtcls[curn] = i;
}

和完整错误是:0xC0000005:访问冲突写入位置0x000001DEA3C7836C.

什么行?如果你正在使用GNU工具,gdb和堆栈跟踪会告诉你哪一行崩溃了。

我猜是下面这几行之一:

particles[i].x =( (float)rand() / (float)RAND_MAX) * SCALE ;
points[fx][fy].numb += 1;
points[fx][fy].prtcls[curn] = i;

你绝对确定所有的数组索引值都在范围内吗?

最新更新