Jo, možná to přistupuje za pole kvůli EOF.. Nevadí, všiml jsem si, že vlastně víš, kolik čísel budeš číst, tak menší úprava. Místo posledniho do while dej for:
for(k=0; k<j; k++)
{
fscanf(fr,"%d",&p_pole[k]);
}
A před tím tu proměnnou j nenuluj, ať v ní zůstane počet čísel a definuj int k;