Cosa c'è di così sbagliato in questa acquisizione

di il
32 risposte

32 Risposte - Pagina 3

  • Re: Cosa c'è di così sbagliato in questa acquisizione

    broke31 ha scritto:


    esplode (va in crash) comunque
    Ovvio ... non hai ancora capito come funziona la malloc.

    Con

    inizio->info=(char*)malloc(sizeof(char));

    allochi il solito spazio per *un solo carattere*. Ma quando copi la stringa questa sarà di più di un carattere (possibilmente tutti quelli allocati prima per la stringa).

    E quando copi tutti i caratteri della tua stringa nello spazio di un carattere, allora hai il crash.

    Ti consiglio di fermarti nella scrittura del codice e cercare di comprendere meglio il funzionamento di puntatori e allocazione della memoria. Il funzionamento della malloc è semplicissimo, pensa a come scriveresti la new dato che hai detto che ti viene più semplice. Studia questa pagina

    http://www.cplusplus.com/reference/cstdlib/malloc
  • Re: Cosa c'è di così sbagliato in questa acquisizione

    Oki grazie! Poi ti farò sapere
  • Re: Cosa c'è di così sbagliato in questa acquisizione

    Questo è il mio ultimo lavoro non sono ricuro che funzioni perfettamente però ti posto il sorgente
    
    
    
    void inserisci(char *stringa)
    {  long int num;
        struct nodo *inizio,*nuovo;
        inizio=&lista;
     
        if(inizio==NULL)
        {
            inizio->info=stringa;
            nuovo=(struct nodo*)malloc(sizeof(struct nodo));
            inizio->next=nuovo;
            nuovo->next=NULL;
        }
            else{
              while(inizio!=NULL)
                  inizio=inizio->next;
              num=strlen(stringa);
                inizio=(struct nodo*)malloc((num+1)*sizeof(struct nodo));
                inizio->info=stringa;
                nuovo=(struct nodo*)malloc(sizeof(struct nodo));
                inizio->next=nuovo->next;
                nuovo->next=NULL;
            
            
            }
            
        }
    
    
    
Devi accedere o registrarti per scrivere nel forum
32 risposte