|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
![]() |
#1 |
Newbie
Registrato: 18-04-2007
Messaggi: 15
![]() |
[C] Allocatore di memoria
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: Codice:
//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); } Come posso fare per memorizzare in fase di assegnamento il valore anche nella mia memoria? HELP!!! |
![]() |
![]() |
![]() |
#2 |
Young Promise
Registrato: 04-02-2006
Messaggi: 2.114
![]() |
Come codice mi sembra un po' intricato... o sono io che sbaglio il concetto di "allocatore di memoria"?
![]() 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? |
![]() |
![]() |
![]() |
#3 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
stringa = "ecco"; //sbagliato
strcpy(stringa,"ecco"); //corretto |
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
compatibilita' ram | Joele1965 | Hardware e Overclock | 3 | 25-12-2008 18.00.17 |
Tanta memoria x cell | TyDany | Archivio News Web | 6 | 29-05-2006 16.54.22 |
Nokia PC Suite: "la memoria non poteva essere written" | tronco | Software applicativo | 4 | 10-01-2006 15.06.55 |
Problema Pinnacle PCTV Pro e periferiche IDE | exion | Hardware e Overclock | 56 | 30-01-2005 10.44.47 |
Beautiful Minds - Nobel alla memoria | Fëanor | Chiacchiere in libertà | 15 | 09-12-2004 17.30.33 |