This code has 3 holes:
First hole: int numEntries. Later you do: ++numEntries;
You increment unspecified value. Not sure if it’s UB, but still bad.
Second and third hole:
const int length = numEntries;
int* arr = new int[length];
And
const int size = numEntries;
int matrix[size];
numEntries has unspecified value (first hole). You use it to initialize length and size – that is Undefined Behaviour. But let’s assume it is just some big number – you allocate memory of unspecified size (possibly just very big size), hence the std::bad_alloc exception – it means you want to allocate more memory that you have available.
Also, matrix is VLA of unspecified size, which is both non-standard and Undefined behaviour.