C'è un po' di confusione ... Se leggi in memoria dei dati secondo una struttura, il puntatore lo devi usare coerentemente. Ovvero se i primi due puntatori puntano a strutture Rettangolo allora dovrai utilizzare puntObj[0] e puntObj[1] SEMPRE come puntatori a Rettangolo (ovvero Rettangolo *). Dato che l'ultimo puntatore l'hai usato per puntare alla struttura Picture dovrai usare puntObj[2] SEMPRE come puntatore a Picture (ovvero Picture *).Ma non ha senso usare un puntatore che punta ad un certo tipo di struttura come puntatore ad un'altra ...