Newsgroup: it.comp.lang.c
Titolo: Dimensionare Array...

       char video[max_row][max_col];
*/
char *video;
video=new char[max_row*max_col];
[...]
La prossima volta, per favore, posta codice senza tutte 'ste linee vuote!
Saluti
-- 
Per l'e-mail rimuovere la frase in maiuscolo e gli underscore.

Ho approcciato da poco la programmazione C e di sicuro sto sbagliando
qualche cosa....ma dal saperlo a capire cosa ce ne passa.
Passo ad una funzione due variabili intere (max_row e max_col) il cui
contenuto ha lo scopo di indicare le dimensioni massime dello schermo.
Queste due variabili vengono usate dalla funzione per dimensionare un array
char multidimensionale.
Ma l'array non viene dimensionato per il contenuto di max_row e max_col ma
per uno strano valore di cui sizeof mi segnala una dimensione di 4484 byte.
Francamente non ne riesco a venire fuori.
Faccio presente che se in fase di dimensionamento dell'array e del puntatore
a questo, anzichč le variabili di cui sopra, metto direttamente le costanti
letterali (es. array[100][100]) allora tutto funziona correttamente.
Grazie in anticipo a chiunque sappia dirmi qualcosa :-)
Ciao
********************** Allego Sorgente ********************************
#include <ncurses.h>
struct lista
{
      char riga[256];
      struct lista *prev;
      struct lista *next;
};
typedef struct lista LISTA;
typedef LISTA *P_LISTA;
/* Funzioni in ordine di apparizione */
void dispmenu(int,int);
P_LISTA caricafile(P_LISTA);
void leggifile(P_LISTA,int,int);
int main()
{
      int max_row,max_col;
      initscr();
      getmaxyx(stdscr,max_row,max_col);
      cbreak();
      keypad(stdscr,TRUE);
      dispmenu(max_row,max_col);
      endwin();
      return(0);
}
void dispmenu(int max_row,int max_col)
{
      int cop=0;
      P_LISTA testa=NULL;
      while(cop!=99)
      {
            erase();
            mvprintw(1,1,"1) Carica il file in memoria");
            mvprintw(1,30,"2) Leggi il file caricato");
            mvscanw(2,1,"%d",&cop);
            switch (cop)
            {
                case 1:
                  {
                        testa=caricafile(testa);
                        break;
                  }
                case 2:
                  {
                        leggifile (testa,max_row,max_col);
                        break;
                  }
            }
      }
}
P_LISTA caricafile(P_LISTA testa)
{
      FILE *fp;
      char nomefile[80],buffer[256];
      P_LISTA nuovo,coda,pt,ptt,pr,prr;
      testa=(P_LISTA)malloc(sizeof(LISTA));
      coda=(P_LISTA)malloc(sizeof(LISTA));
      testa->prev=testa;
      testa->next=testa;
      coda->next=coda;
      coda->prev=testa;
      erase();
      mvprintw(1,1,"Inserisci il nome del file che vuoi caricare in
memoria - nulla per rinunciare");
      mvscanw(2,1,"%s",nomefile);
      if (*nomefile =='\n')
            return(testa);
      if ((fp=fopen(nomefile,"r"))==NULL)
      {
            mvprintw(3,1,"Il file che vuoi caricare non esiste od il nome
file č sbagliato");
            getch();
            return(testa);
      }
      while((fgets(buffer,sizeof(buffer),fp))!=NULL)
      {
            if (testa->next==testa)
            {
                  strcpy(testa->riga,buffer);
                  testa->next=coda;
                        pt=testa;
                  ptt=pt->next;
            }
            else
            {
                  nuovo=(P_LISTA)malloc(sizeof(LISTA));
                    strcpy(nuovo->riga,buffer);
                  nuovo->next=ptt;
                  nuovo->prev=pt;
                  pt->next=nuovo;
                  ptt->prev=nuovo;
                  pt=nuovo;
            }
      }
      fclose(fp);
      return(testa);
}
void leggifile(P_LISTA testa,int max_row, int max_col)
{
      int ch,count,c,x,y;
      char video[max_row][max_col];
      erase();
      char (*ptr)[max_col];
      char *pptr;
      P_LISTA pt,ptt,pt_down,pt_up;
      pt=testa;
      pt_down=pt->next;
      ptr=video;
        pptr=ptr[0];
      count=0;
      for (c=0;c<max_row*max_col;c++)
            *pptr++=' ';
      while(pt->next!=pt && count <30)
      {
            strcpy(ptr[count],pt->riga);
            count++;
            pt=pt->next;
      }
      erase();
      for(c=0;c<30;c++)
      mvprintw(c,1,"%s",video[c]);
      refresh();
      while ((ch=getch())!=KEY_F(9))
      {
            switch (ch)
            {
                case KEY_F(1):
                  {
                        count=0;
                        while(pt_down->next!=pt_down && count <30)
                        {
                             strcpy(video[count],pt_down->riga);
                             count++;
                             pt_down=pt_down->next;
                        }
                        erase();
                        for(c=0;c<30;c++)
                             mvprintw(c,1,"%s",video[c]);
                        refresh();
                        break;
                  }
                case KEY_F(2):
                  {
                        break;
                  }
            }
      }
      return;
}

 video=new char[max_row*max_col];
Ecco, questo non lo puo` fare.
char *video = malloc(max_row * max_col);
ciao
K
-- 
Home: 
http://kronoz.cjb.net
Let me make your mind, leave yourself behind
Be not afraid

 dimensione di 4484 byte.
Ho dato  un'occhiata veloce e  sembra ok. Prova  a stampare i  valori di
max_row e max_col all'interno della funzione per verificare che arrivino
corretti.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"La teoria e` quando sappiamo come funzionano le cose ma non funzionano.
 La pratica e` quando le cose funzionano ma non sappiamo perche`.
 Abbiamo unito la teoria e la pratica: le cose non funzionano piu` e non
 sappiamo il perche`." -- A. Einstein

 char *video = malloc(max_row * max_col);
Scusate, credevo di postare su it.c.l.c++
