Newsgroup: it.comp.lang.c
Titolo: Warning "strano"

A causa del codice seguente il compilatore mi dą un warning:
"multi-character character constant"
Mi crea l'eseguibile, pero' poi il pogramma "non funzia"...
void inserisci(int);
void inserisci(int numero_curve)
{
double *tabella[numero_curve][100][2];
int i=0, j=0, k=0;
for(i=0; i<numero_curve; i++)
{ for(j=0; j<100; j++)
   { for(k=0; k<2; k++)
     {tabella[i][j][k]=(double*)malloc(sizeof(double)); 
     }}}
Questo č una parte di un .h tutto compreso in un "progetto" con main e 
compagnia.
Il mio dubbio č sul ciclo for, in particolare sul malloc, che dovrebbe 
creare ed allocare memoria per una tabella in cui numero_curve č il 
numero di righe, (ca.50), e per ogni riga ho 100 coppie di valori 
(abbinati a 2 a 2)..
Grazie a chi ha avuto la pazienza di leggere ;)
-- 
Ragno
http://ragnazz.altervista.org


L'errore era simile al tuo.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 L'errore era simile al tuo.
Grazie!
-- 
Ragno
http://ragnazz.altervista.org

 lo spazio per gli elementi della tabella, ma non per la tabella.
Ho letto il messaggio... quindi dovrei anch'io aggiungere un'altra riga 
in cui alloco la memoria per il puntatore *tabella. E' sufficiente e 
tutto il resto va bene?
Se si, che riga devo aggiungere di preciso?
Arigrazie!!
-- 
Ragno
http://ragnazz.altervista.org

 Arigrazie!!
Innanzitutto devo chiederti scusa. Mi capita di dire cazzate, ma
cosi' grosse fortunatamente non mi capita molto spesso.
L'errore NON e' nel fatto che tu non abbia allocato la tabella,
ma e' nel fatto che stai provando ad allocare una tabella con
una dimensione variabile.
Se non erro, nell'ultimo standard e' prevista la possibilita dei
Variable Lenght Array (cosa che e' prevista come estensione non
standard da qualche compilatore), evidentemente il tuo non supporta
i VLA.
La funzione che dovrebbe fare quello che tu desideri, dovrebbe essere
la seguente.
void inserisci(int numero_curve)
{
   int i=0, j=0, k=0;
   double**** tabellaPP = NULL;
   double***  rowXP = NULL;
   double**   rowYP = NULL;
   if(0 < numero_curve)
      tabellaPP = calloc(1, numero_curve*sizeof(double*));
// 100*2*
   if(NULL != tabellaPP)
   {
      for(i=0; i<numero_curve; i++)
      {
         tabellaPP[i] = rowXP = calloc(1, 100*sizeof(double*));
         if(NULL != rowXP)
         {
            for(j=0; j<100; j++)
            { 
               rowXP[j] = rowYP = calloc(1, 2*sizeof(double*));
               if(NULL != rowYP)
               {
                  for(k=0; k<2; k++)
                  {
                     rowYP[k] = calloc(1, sizeof(double)); 
                  }
               }
            }
         }
      }
   }
   return;
}
Tieni presente  che se non fai restituire niente alla funzione,
quanto allocato al suo interno si perde al return;


 quanto allocato al suo interno si perde al return;
Ok, quello per fortuna riesco a farlo ;)
Grazie ancora!!
-- 
Ragno
http://ragnazz.altervista.org

 // 100*2*
^^^^^^^^^^^
Questo è un commento...o.??
-- 
Ragno
http://ragnazz.altervista.org

 Questo è un commento...o.??
Ho lasciato quel commento per ricordarmi le dimensioni
e mi sono dimenticato di cancellarlo.


 e mi sono dimenticato di cancellarlo.
Ok, avevo immaginato qualcosa del genere ;)
-- 
Ragno
http://ragnazz.altervista.org