2014-03-26 105 views
0

我仍然在學習SFML和C++,所以請理解我仍處於基礎級別。 這是我第一次使用這個網站,所以IDK,如果我這樣做的權利。 我想創建一個函數set,這將允許我傳遞一個2d數組作爲參數,並在數組中有1時放置一個磁貼。所以我可以使用矩陣繪製地圖和事物。 ww是窗口寬度,wh是窗口高度。在main我做了一個for循環,將穿過瓷磚並將它們繪製到窗口。但是當我運行它時,它給了我錯誤:分段錯誤(核心轉儲)「錯誤:139」。有沒有更好的方法來做到這一點,我做錯了什麼? 謝謝。瓷磚映射錯誤

struct field 
{ 
    int rectsizex; 
    int rectsizey; 
    RectangleShape * tiles; 

    field (int s) 
    { 
     rectsizex = ww/s; 
     rectsizey = wh/s; 

     tiles = new RectangleShape[rectsizex * rectsizey]; 
    } 
    ~field() 
    { 
     delete tiles; 
    } 

    RectangleShape * set(int ** matr) 
    { 
     Vector2f size((ww/rectsizex), (wh/rectsizey));  
     int posx = ww/rectsizex; 
     int posy = wh/rectsizey; 

     for(int x = 0; x<rectsizex; x++) 
     { 
      for(int y = 0; y<rectsizey; y++) 
      { 
       int i = ((x*rectsizey)+1)+y; 
       tiles[i].setSize(size); 
       if(matr[x][y] == 1) 
       { 
        tiles[i].setFillColor(Color::Black); 
       } 
       else 
       { 
        tiles[i].setFillColor(Color::White); 
       } 
       tiles[i].setPosition(x * posx, y * posy); 
      } 
     } 

     return tiles; 
    } 



}; 
+1

這是一個基本的編程問題,最好通過使用調試器來解決。你會遇到很多這些問題,你需要正確的工具。檢查你的開發工具,並學習如何使用你使用的IDE的調試器。 – nvoigt

回答

0

找出你得到了我什麼樣的價值觀:

int i = ((x*rectsizey)+1)+y; 

此值絕對是你的數組邊界之外,因此錯誤。使用調試器,或在獲取i值後輸入一些打印語句。