Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di braian
    Registrato dal
    Apr 2007
    Messaggi
    35

    [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!!!

  2. #2
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67
    codice:
    int main(int argc, char* argv[])
    {	
    	memoria* mem = creaMemoria(10); /* Assegna a mem l'indirizzo delloggetto allocato */
    	char* stringa= alloc(5,mem); /* Assegna a stringa l'indirizzo della memoria allocata */ 
    	stringa="ecco"; /* assegna a stringa l'indirizzo in memoria della stringa "ecco"
    	printf("%s\n",stringa); /* stampa "ecco" */
    	printf("%s\n",mem->struttura); /* Booo, stampa il contenuto indefinito della memoria? niente SIGSEGV? :) */
    }
    codice:
    #include <stdlib.h>
    ...
      mem = crea memoria...
      stringa = alloc....
      strncpy(stringa, "ecco", 5);
      printf("%s\n", stringa);
      printf("%s\n", mem->struttura);
      ...
      /* >>>>> */ return EXIT_SUCCESS; /* <<<<< */
    Free software: free as freedom!

  3. #3
    A parte che manca anche la fase di liberazione della memoria.

  4. #4
    Utente di HTML.it L'avatar di braian
    Registrato dal
    Apr 2007
    Messaggi
    35
    Si , grazie a Dio mi ero reso conto anche io della copia sbagliata della stringa... grazie davvero comunque
    Il problema stava tutto li'.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.