PDA

Visualizza versione completa : [C] Allocatore di memoria


braian
16-06-2008, 13.45.46
Devo realizzare per un esame un allocatore di memoria... le specifiche sono un po' pi complesse ma il problema di fondo il seguente:

Devo realizzare una struttura che serva da memoria, in particolare ho pensato a dichiararmi un array di char visto che char ha dimensione fissa di 1 byte;

L'idea dell'allocatore simile a quella che anche presente sul libro Kerninghan,Ritchie "Il linguaggio C" e che riporto qui sotto:



//ALLOCATORE SEMPLICISTICO DI MEMORIA
#include <stdio.h>
#include <stdlib.h>
#define ALLOCSIZE 100


typedef struct memoria{
int posizioneAttuale;
char* struttura;
int dimensione;
}memoria;

//crea la memoria
memoria* creaMemoria(int dim)
{
memoria* mem = malloc(sizeof(memoria));
mem->dimensione=dim;
mem->posizioneAttuale=0;
return mem;
}

//alloca uno spazio di dimensione n in memoria
char* alloc(int n, memoria * memory) /* ritorna un puntatore ad n caratteri */
{
int vecchiaPosizione = memory->posizioneAttuale;
memory->posizioneAttuale += n;
return memory->struttura+vecchiaPosizione;
}


int main(int argc, char* argv[])
{
memoria* mem = creaMemoria(10);
char* stringa= alloc(5,mem);
stringa="ecco";
printf("%s\n",stringa);
printf("%s\n",mem->struttura);
}

In fase di debug vedo che quando assegno allavariabile stringa il valore "ecco" tale valore non viene riportato nella mia memoria ovvero mem->struttura, questa cosa si vede anche dal fatto che la seconda printf non stampa nulla...
Come posso fare per memorizzare in fase di assegnamento il valore anche nella mia memoria?

HELP!!!

UG0_BOSS
17-06-2008, 13.15.22
Come codice mi sembra un po' intricato... o sono io che sbaglio il concetto di "allocatore di memoria"? :mm:

Intanto un primo errore che nella struct memoria hai dichiarato come struttura un puntatore a char al quale non collegata nessuna area di memoria. Quindi o dichiari quel char come vettore (char struttura[100]) oppure ogni volta che allochi lo spazio di una struct memoria devi allocare altro spazio per la stringa (ma poi ti devi ricordare di liberare entrambi).

Poi non capisco a cosa servano le variabili posizioneAttuale e dimensione all'interno della strutturra... la dimesione la puoi ottenere con sizeof() e la posizione con il puntatore... o forse si riferiscono ad altro?

Alhazred
17-06-2008, 14.21.47
stringa = "ecco"; //sbagliato
strcpy(stringa,"ecco"); //corretto