Guarda, è questo il codice che devi usare:

codice:
#include <time.h>
#include <stdlib.h>
#include <malloc.h>

int isDoppio(int*array, int x, int len){
int i;

    for(i=0;i<len; i++)
        if(array[i] == x) return 1;

return 0;
}


void main(){
srand(time(NULL));
int *generati;
int val;
int i=0;
generati = (int*) malloc(12*sizeof(int));

for(i=0;i<11;i++){
    val = rand()%12;
    do{
        if( isDoppio(generati, val, 12) == 1)
            val = rand()%12;
        else{
         generati[i] = val;
         break;
        }

    }while(1);
}

for(i=0;i<12;i++)
    printf("%d\n", generati[i]);
}
Con il ciclo for generi 12 numeri casuali, con il do-while controlli che siano uguali, se lo sono, ne generi un'altro, altrimenti lo inserisci nel vettore e riparti. Non capisco molto bene il tuo codice, perchè inserisci tutti i valori che generi nell'array doppio? Mi spieghi la logica del tuo codice? Così possiamo discuterne insieme..