簡體   English   中英

釋放內存整數數組時出現分段錯誤

[英]segmentation fault while freeing memory integer array

所以基本上我的問題是在嘗試從數組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是整個網格的大小,而squaresize是網格中每個正方形的大小,npoints是x和y向量的大小,此函數為由更改平方大小的循環調用。

我不知道免費有什么問題,我也很欣賞建議(x和y數組的大小應該在5k以上)

當您弄亂其他地方的記憶時,免費通常會失敗。 由於內存是您的,所以之前不會進行段故障處理,但是您已經搞砸了內存管理數據結構,因此可以自由訪問外部內存。

幾乎可以保證是這樣的:

 q[helper1]++;

如果helper1> nsqr,在此之前放一個斷言(或打印)

 printf("TOO BIG!  %d > %d\n", helper1, nsqr);
 q[helper1]++;

..或根據評論,也檢查是否為負數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM