Ho corretto il codice e cosi sembra funzionare:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 3
#define MAX 2048


int main(){
  char ** arrey;
  char* stringa="prova";
  int i;
  arrey=(char**)malloc(N*sizeof(char*));
  arrey[0]=(char*)malloc(strlen(stringa)+1);
  strcpy(arrey[0],stringa);
  arrey[1]=(char*)malloc(strlen("pino")+1);
  strcpy(arrey[1],"pino");
  arrey[2]=(char*)malloc(strlen("pluto")+1);
  strcpy(arrey[2],"pluto");
  
  for(i=0;i<N;i++)
    printf("%s\n",arrey[i]);

  fflush(stdout);

  arrey=(char**)realloc(arrey,sizeof(char*)*(N+1));
  arrey[3]=(char*)malloc(strlen("NUOVO")+1);
  strcpy(arrey[3],"NUOVO");

  for(i=0;i<(N+1);i++){
    printf("%s\n",arrey[i]);
    fflush(stdout);
  }

  return 0;
}
cosi dovrebbe essere corretto no? o funziona per grazia divina??? il c rimane un mistero per me... sob...