Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 16-06-2008, 14.45.46   #1
braian
Newbie
 
Registrato: 18-04-2007
Messaggi: 15
braian promette bene
[C] Allocatore di memoria

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:

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);
}
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!!!
braian non è collegato   Rispondi citando
Vecchio 17-06-2008, 14.15.22   #2
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
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?
UG0_BOSS non è collegato   Rispondi citando
Vecchio 17-06-2008, 15.21.47   #3
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
stringa = "ecco"; //sbagliato
strcpy(stringa,"ecco"); //corretto
Alhazred non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
compatibilita' ram Joele1965 Hardware e Overclock 3 25-12-2008 19.00.17
Tanta memoria x cell TyDany Archivio News Web 6 29-05-2006 17.54.22
Nokia PC Suite: "la memoria non poteva essere written" tronco Software applicativo 4 10-01-2006 16.06.55
Problema Pinnacle PCTV Pro e periferiche IDE exion Hardware e Overclock 56 30-01-2005 11.44.47
Beautiful Minds - Nobel alla memoria Fëanor Chiacchiere in libertà 15 09-12-2004 18.30.33

Orario GMT +2. Ora sono le: 19.22.20.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.