учитывая адрес для массива целых чисел, вам нужно знать, сколько в массиве, так как целое число может быть ноль. Другими словами, без разделителя, указывающего конец массива, невозможно узнать, сколько значений было НАСТОЯЩЕМ сохранено в массиве.
базовый массив кучи c должен по крайней мере иметь вторую переменную хранения количество элементов. как еще было правильно распределено?
int nElements = 10;
int *pInts = (int*)malloc(nElements * sizeof(int));
int *pEndOfArrayAddress = pInts + (nElements-1);