Niepotrzebnie alokujesz tablicę wskaźników na struktury. Powinieneś zaalokować tablice struktur.
A tak dla edukacji:
for(int i = 0; i< 3; i++){
struct xyz p;
p.min = min
*(ptr+ i) = &p;
}
W każdym obiegu pętli tworzysz obiekt xyz i zapamiętujesz jego adres. Tylko, że te obiekty przestają istnieć po każdorazowym wyjściu z ciała pętli. Klasyczny błąd trzymania wskaźnika do zwolnionego obiektu:
int* fun() {
int x=10;
return &x;
}
int main() {
int *ptr = fun();
*ptr = 5; // odwołanie do zwolnionego obiektu, undefined behaviour, przeważnie crash
}
A Twój kod powinien wyglądać tak:
struct xyz* ptr = (struct xyz *)malloc(sizeof(struct xyz ) * 3);
for (int i = 0; i < 3; i++) {
ptr[i].min = min;
}