try always to use C++ facilities, like type aliasing.
using ptrCell = Cell*;
/*or: typedef Cell* ptrCell; */
now your code will look like the following, and it is much clearer what happening:
ptrCell createBoard(int width, in height)
{
ptrCell* cellRowHeads = new ptrCell [Height]; // ptrCell* is an array of Cell* all initialized to nullptr by default
for( int i=0; i< height; i++)
{
ptrCell temp = nullptr;
temp = cellRowHeads[i]; // copy assignment of an element of the array which equals to nullptr, read above
for (int j=0; j<width; j++)
{
ptrCell cell = new Cell;
temp->next = cell; // BOOOM, arrow operator on a nullptr, Segmentation fault.