Guarda ... nell'uso che fai di res e ptr ci sono errori gravi e non so neanche come non sia stato evidenziato nessun errore dal compilatore.
In pratica, il codice con le correzioni dovrebbe essere questo
#include <stdio.h>
#include <stdlib.h>
void FindMin(int n, int array[n], int res[2]) {
int i;
int min = 999999;
int pos = 0;
for (i = 0; i<n; i++) {
if (array[i]<min) {
min = array[i];
pos = i;
}
}
res[0] = min;
res[1] = pos;
}
void PrintMin(int n, int array[MAXN]) {
int i, j;
int min, tmp;
for (i = 0; i<n; i++) {
min = 999999;
tmp = 0;
for (j = 0; j<n; j++) {
if (array[j]<min) {
min = array[j];
tmp = j;
}
}
printf("minimo attuale: %d\n", min);
array[tmp] = 999999;
}
}
int main(void) {
int n;
printf("inserire dimensione vettore: ");
scanf("%d", &n);
printf("\n");
int i;
int array[n];
FILE *stream;
stream=fopen("numeri.txt", "r");
if (stream == NULL) {
printf("ERRORE: impossibile aprire file\n");
return(1);
}
else {
printf("vettore memorizzato: \n");
for (i = 0; i<n; i++) {
fscanf(stream, "%d", &array[i]);
printf("%d ", array[i]);
}
}
printf("\n");
int res[2] = { 0, 0 };
FindMin(n, array, res);
printf("il minimo del vettore memorizzato e' %d e si trova in posizione %d\n", res[0], res[1]);
printf("\n");
printf("\nstampa dei minimi: \n");
PrintMin(n, array);
return 0;
}
Molto probabilmente quell'uso sbagliato dei puntatori sporcava in memoria il valore di n e per questo avevi il problema. Ma non era il problema più grave.