所以基本上我的问题是在这个函数中,而我正试图从数组q释放内存。
int makegrid (float *x, float *y, float squaresize, float map, int npoints)
{
int score=0, i;
int m = map/squaresize;
int nsqr = m*m;
int *q;
q = NULL;
q = (int *) malloc (sizeof(int)*nsqr);
for(i=0;i<nsqr;i++)
q[i] = 0;
int helper1 = 0;
int helper2;
float helperf;
for(i = 0; i < npoints; i++)
{
helperf = x[i] - E;
helper1 = floor(helperf/squaresize)*(m);
helperf = y[i] - E;
helper2 = floor(helperf/squaresize);
helper1 += helper2;
q[helper1]++;
}
for(i=0;i<nsqr;i++)
{
if(q[i] >= 1 && q[i] <= 4)
score--;
else if (q[i] == 0)
score++;
else
score+=5;
}
free(q);
q = NULL;
return score;
}
该函数的目标是为某个生成的网格创建一个分数,map是整个网格的大小,而squareize是网格中每个方块的大小,npoints是x和y向量的大小,这个函数由一个改变squareize的循环调用。
我不知道免费有什么问题,我很欣赏建议(x和y数组的大小应该高于5k)
答案 0 :(得分:1)
几乎可以保证这一行:
q[helper1]++;
如果是helper1&gt;则在此之前放置一个断言(或打印) nsqr
printf("TOO BIG! %d > %d\n", helper1, nsqr);
q[helper1]++;
..或根据评论,检查负数。