With this statement
int** items[5];
In fact, you are declaring an array of 5 elements which are pointers to pointers. I honestly do not understand why you need such a complicated thing.
What I think you need is simply an array of pointers
int* items[5]; // array de 5 ponteiros
or the pointer to other pointers.
int** items;
Think a lot about what you are doing in this statement:
*items[i] = new int;
What is items[i]
?
Pointer.
What happens if you dereferences a pointer?
You access the dotted memory, but there is no memory allocated to your case. To allocate memory for the second level pointer you have to first allocate memory for those of first.
What you have to do first is to allocate memory for the pointers of the array and only then for the pointers that the pointers of the array pointer.
int** array[2];
array[0] = new int*; // alocar memoria para um ponteiro que ponta a um ponteiro
*array[0] = new int; // agora podes alocar memoria para o ponteiro de segundo nivel.