Domanda

typedef struct     {       tavola struct ** simboli; // array di stack       int top; // indice dell'elemento superiore       int size; // dimensione massima della pila     } Impilare;

void *createStack(int size)
{
  stack *stck;
  stck = (stack *) malloc(sizeof(stack));

  stck->symbols  = ....

  stck->size = size;
  stck->top = -1;
  printf("stack is created --> size is : %d \n",size);
}

Qui ho bisogno di allocare serie simbolo del mio stack che è "...", ma non riuscivo a capire che di sintassi, pls aiuto:)

È stato utile?

Soluzione

(struct table **)malloc(size * sizeof(struct table*));

Ma questo è, se si vuole pre-allocare tutto lo spazio in una volta. Se si desidera allocare più, come si va, si potrebbe iniziare con qualcosa di più piccolo di size e allocare più in push () funzione quando si esaurisce lo spazio.

Altri suggerimenti

malloc(size * sizeof(struct table*));

E 'simboli destinati ad essere una matrice 1-d del puntatore a struct tavolo o una matrice 2-D della tabella di struct?

stck->symbols = malloc(sizeof *(stck->symbols) * numberOfElements);

per qualunque valore della numberOfElements. Dato che il tipo di simboli stck-> è struct table **, il tipo di *(stck->symbols) espressione verrà struct table *. Si potrebbe anche scrivere

malloc(sizeof (struct table*) * numberOfElements);

, ma io preferisco il primo metodo, in quanto riduce al minimo il numero di posti che dovete ricordare il tipo.

Poiché si tratta di C, si fa non hanno bisogno di gettare il risultato di malloc(), ed è considerato pratica poveri per farlo; Se si dimentica di includere stdlib.h o comunque non hanno un prototipo per malloc() nel campo di applicazione, il cast sarà sopprimere un avvertimento che vi avverte del problema (anche se dal C99 non consente più implicita int digitazione, che non può più essere un problema ).

stck->symbols  = baseaddress = malloc(...required total size...);

int nextDataLocation = baseAddress + numberOfRows*sizeof(void*);

for(int i=0; i<numberOfLines; i++)
{
    stck->symbols[i] = nextDataLocation;
    ..copy string i to address stck->symbols[i]...
    nextDataLocation += lengthOfString[i];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top