That is 400 RectangleShapes and, because you are using an array, they're all stored on the stack, which is limited. You are risking overloading the stack and therefore causing a crash. You could (should) rewrite it to use an STL container; the standard choice of vector should work perfectly for you here. This uses the heap (or "free store") and is only limited really limited by the amount of RAM. Vectors can also be resized during runtime.
First, you need to #include <vector>
Then, you can create them as two-dimensional and initialised with your sizes like this:
std::vector<std::vector<sf::RectangleShape>> Player1Board(10, std::vector<sf::RectangleShape>(10));
std::vector<std::vector<sf::RectangleShape>> Player2Board(10, std::vector<sf::RectangleShape>(10));
std::vector<std::vector<sf::RectangleShape>> Player3Board(10, std::vector<sf::RectangleShape>(10));
std::vector<std::vector<sf::RectangleShape>> Player4Board(10, std::vector<sf::RectangleShape>(10));
You can access the elements in the same way as an array (e.g. Player1Board[2][4])
Then, you can create a vector of those boards like this:
std::vector<std::vector<std::vector<sf::RectangleShape>>> Boards;
Boards.push_back(Player1Board);
Boards.push_back(Player2Board);
Boards.push_back(Player3Board);
Boards.push_back(Player4Board);
Then, the original vectors Player1Board, Player2Board etc. are no longer needed and can be discarded.
Then, to access them, you would need three values. e.g. Boards[0][2][4] would access the same element as Player1Board[2][4] would have done.
That said, it's a lot of rectangle shapes to be drawn individually. It would be much better to use a vertex array. You will also find the part about Tile Map useful here.Also, You may want to consider not using nested - or multi-dimensional - vectors (or arrays) as using a single dimensional one can be more appropriate.