Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] allocaz.dinamica e inizializzaz. matrice 2D

    Ciao a tutti!
    Come da oggetto.
    Copio il codice:

    codice:
    ////******************** Allocazione dinamica matrice 2D **********************//
       int ncol = 4;
       int nline = 16;
       int ii,jj;
    
      double **SIMdata;
      SIMdata = (double**) malloc( nline * sizeof(double*) );
      for(ii=0; ii<nline; ii++)
        {
          SIMdata[ii] = (double*) malloc( ncol * sizeof(double*) );
        }  
    // SIMdata[nline][ncol]=[0...nline-1][0...ncol-1]
    
    //************************* Inizializzazione SIMdata **************************//
    
    //   double SIMdata [nline][ncol];
       
       for(ii=0;ii<nline;ii++)
         {
            for(jj=0;jj<ncol;jj++)
              {               
                 SIMdata[ii][jj]=0.; // INIZIALIZZAZIONE
                 printf("%lf\n",SIMdata[ii][jj]);
              }// for(j ...)
         }// for(i ...)
    Apparentemente l'allocazione e' eseguita correttamente, qualunque sia nline. La seconda parte, invece, si "intoppa" se nline e' "grande" (ordine 1000). La cosa strana e' che se io inizializzo la matrice in maniera diretta (eliminando l'allocazione dinamica e introducendo un'istruzione tipo "double SIMdata [nline][ncol];"), l'inizializzazione e' eseguita correttamente per qualunque nline.
    C'e un errore nel mio codice, oppure l'allocazione dinamica ha dei limiti?
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    Attenzione:
    codice:
    for(ii=0; ii<nline; ii++)
        {
          SIMdata[ii] = (double*) malloc( ncol * sizeof(double) );
        }
    La parte in grassetto. Avevi scritto sizeof(double *).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie!
    Sospettavo un errore banale...

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    sizeof(double*)

    Il compilatore la interpreta come grandezza di un puntatore a double?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Esatto; questo valore tra l'altro può essere usato per capire in che ambiente sta girando il compilatore (2=>16 bit; 4=>32 bit; 8=>64 bit).
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.