Your delete call looks right.
Are you doing something unintended when you are scooting the array over after deletion? Something like:
// Scoot over remaining sprites.
for j = i to sprite_count-2
p_sprite[j] = p_sprite[j+1]
Where your "decrement sprite_count" is inside the loop? If not, try printing out sprite_count at the beginning and end of the method and see if you can narrow down where it is getting changed.