Min heap without recursion
Memory over-runs

readheap is non-size-aware, so it's wide open to an overrun error (or even a deliberate overrun attack). Pass in a size, or use a sized data structure like a vector.

Indentation

You should fix it up for this line:

for (int k = 1; k &lt; size; ++k) {


Order-of-operations

Neither of these expressions need parentheses:

index = (2 * j + 1);  

index &lt; (k - 1)


Deleting a null?

x = nullptr;
delete x;


Does that actually run without crashing?

Const arguments

void heapPrint(int* theheap, int size) {


should be

void heapPrint(const int *theheap, int size) {