[C]Problema con array di strutture e allocazione dinamica

di il
8 risposte

[C]Problema con array di strutture e allocazione dinamica

Devo dichiarare un array di strurre vuoto e poi nel corso del programma riallocare la memoria per l'array ogni volta che vi aggiungo una struttura. Prima però devo utilizzare malloc? La dichiarazione è corretta?

struct comp pa[0], *ppa = pa;

Se utilizzo malloc, il compilatore restituisce un errore.

pa = malloc(sizeof(struct comp));
Qualche suggerimento? Grazie mille in anticipo per qualsialsi risposta.

8 Risposte

  • Re: [C]Problema con array di strutture e allocazione dinamica

    Ma la struttura è definita?
  • Re: [C]Problema con array di strutture e allocazione dinamica

    Si.
  • Re: [C]Problema con array di strutture e allocazione dinamica

    
    struct comp *pa = NULL;
    
    pa = malloc(sizeof(struct comp));
    
    questa non da errore.
  • Re: [C]Problema con array di strutture e allocazione dinamica

    
    struct comp *comps = 0;
    struct comp *ccompx(const char name[])
    {
    struct comp *p;
    struct comp *pa;
    glob = 0;
    pa = (struct comp*) malloc(sizeof(struct comp));
    if(!pa)
    {
        puts("Ricerca interrotta.");
        return 0;
    }
    int s;
    for(p = comps, s = 1; p; p = p->n, s++)
    {
        int i = 0;
    for(; name[i] != p->name[i]; i++);
    if(p && name[i] == p->name[i])
    {
        int a = 1;
        for(; name[i + a] == p->name[i + a]; a++);
        if(a == strlen(name))
        {
            pa[s - 1] = p; // errore
            glob++;
            realloc(pa, sizeof(struct comp) * s + 1);
            if(!pa)
            {
                puts("Ricerca non completata.")
                goto ret;
            }
        }
        return 0;
    }
    }
    ret:
    return pa;
    }
    
    Questa è tutta la funzione. Perchè pa[s - 1] = p; non è corretto?
  • Re: [C]Problema con array di strutture e allocazione dinamica

    
    pa = (struct comp*) malloc(sizeof(struct comp));
    ............
    pa[s - 1] = p; // errore
    
    pa è una cella non un vettore. per forza che ti da errore.
  • Re: [C]Problema con array di strutture e allocazione dinamica

    Qundi come faccio a creare un vettore di strutture dinamico?
  • Re: [C]Problema con array di strutture e allocazione dinamica

    
    #include <stdio.h>
    #include <stdlib.h>
    
    struct comp
    {
    	char name[50];
    };
    
    int main()
    {
    	int i = 0;
    	struct comp **structArray = NULL;
    	for(i = 0; i < 10; i++)
    	{
    		struct comp *pCell = (struct comp*)malloc(sizeof(struct comp));
    		sprintf(pCell->name,"Cella nr. %d",i);
    		structArray = (struct comp **)realloc(structArray,sizeof(struct comp *) * (i+1));
    		structArray[i] = pCell;   
    	}
    
    	for(i = 0; i < 10; i++)
    	{
    		printf("%s\n",structArray[i]->name);
    		free(structArray[i]);
    	}
    
    	free(structArray);
    }
    
  • Re: [C]Problema con array di strutture e allocazione dinamica

    Funziona.
    Ho apportato le seguenti modifiche:
    
    struct comp *p = (struct comp*)malloc(sizeof(struct comp));
        if(!p)
        {
            //
        }
        struct comp **pv = 0;
        struct comp ***point;
        int s;
        for(p = comps, s = 1; p; p = p->n, s++)
        {
            unsigned int i = 0;
            for(; name[i] != p->name[i]; i++);
            if(p && name[i] == p->name[i])
            {
                unsigned int a = 1;
                for(; name[i + a] == p->name[i + a]; a++);
                if(a == strlen(name))
                {
                    pv = (struct comp **) realloc(pv, sizeof(struct   comp*) * (s + 1));
                    if(!pv)
                    {
                        goto ret;
                    }
                    point = &pv;
                    pv[s] = p;
                }
                continue;
            }
        }
        pv[0]->code = s; // l'elemento 0 funge da contatore degli elementi totali
    ret:                        
        return point;
    }
    
    
    Se volessi che la funzione restituisse questo vettore di strutture, in modo da poterlo utilizzare nella funzione principale, quali modifiche dovrei apllicare al codice?
Devi accedere o registrarti per scrivere nel forum
8 risposte