Allocazione dinamica della memoria in C

di il
7 risposte

Allocazione dinamica della memoria in C

Ragazzi vi è il seguente codice realizzato da me:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

#define MAXPERSONE 100

typedef struct {
    char nome [3000];
    char cognome [3000];
    char numero [1000]; // dim * MAXPERSONE = 10*100 = 1000
    char giorno [1000];
    char mese [1000];
    char anno [1000];
} t_contatto;

int main(int argc, const char * argv[])
{
    t_contatto voce;
    unsigned long int lenght = 0;
    int menu, i, i_nome = 0, i_cognome = 0, i_giorno = 0, i_mese = 0, i_anno = 0;
    char nome [30], cognome [30], giorno[10], mese[10], anno[10];
    
    do
    {
        printf("Premi:\n1: Iscrizione nuovo cliente\n2: Registrazione presenza socio\n");
        scanf("%d", &menu);
    }
    while (menu > 2 || menu < 1);
    switch (menu) {
        case 1:
            for (i=0; i<3; i++){
                puts("Iscrizione nuovo cliente");
                printf("Nome: ");
                scanf("%s", nome); // utilizzare l'allocazione dinamica della memoria
                                
                strcpy(&voce.nome[i_nome], nome);
                lenght=strlen(nome) + 1;
                i_nome+=lenght;
                printf("Cognome: ");
                scanf("%s", cognome); // utilizzare l'allocazione dinamica della memoria
                strcpy(&voce.cognome[i_cognome], cognome);
                lenght=strlen(cognome) + 1;
                i_cognome+=lenght;
                // inserire anno di nascita
                printf("Giorno di Nascita: ");
                scanf("%s", giorno); // utilizzare l'allocazione dinamica della memoria
                strcpy(&voce.giorno[i_giorno], giorno);
                lenght=strlen(giorno) + 1;
                i_giorno+=lenght;
                printf("Mese di Nascita: ");
                scanf("%s", mese); // utilizzare l'allocazione dinamica della memoria
                strcpy(&voce.mese[i_mese], giorno);
                lenght=strlen(mese) + 1;
                i_mese+=lenght;
                printf("Anno di Nascita: ");
                scanf("%s", anno); // utilizzare l'allocazione dinamica della memoria
                strcpy(&voce.anno[i_anno], anno);
                lenght=strlen(anno) + 1;
                i_anno+=lenght;
            }

            break;
        case 2:
            //istruzioni
        default:
            puts("Errore!");
            break;
    }
    return 0;
}
Come posso utilizzare l'allocazione dinamica della memoria nei punti specificati tra i commenti? Grazie

7 Risposte

  • Re: Allocazione dinamica della memoria in C

    Prima domanda: secondo te, che cosa e' l'allocazione dinamica della memoria? E a che serve?

    Seconda domanda: come si fa l'allocazione dinamica della memoria? Ci sono funzioni della libreria standard del C che possono essere utilizzate per farlo, oppure ci sono delle parole chiave nel linguaggio?
  • Re: Allocazione dinamica della memoria in C

    1) Serve ad assegnare la giusta quantità di memoria alle variabili
    2) ci sono librerie che richiamano funzioni come malloc() e assert() e free()
    Mi dovresti rispondere tu alla domanda però..
  • Re: Allocazione dinamica della memoria in C

    Beh la risposta alla tua domanda te la sei data da solo ... usa le funzioni malloc per allocare lo spazio e la free per liberarla.
  • Re: Allocazione dinamica della memoria in C

    E ma non so come usarle!
  • Re: Allocazione dinamica della memoria in C

    Per la malloc

    http://www.cplusplus.com/reference/cstdlib/malloc

    e per la free

    http://www.cplusplus.com/reference/cstdlib/free
  • Re: Allocazione dinamica della memoria in C

    Fabio97 ha scritto:


    1) Serve ad assegnare la giusta quantità di memoria alle variabili
    2) ci sono librerie che richiamano funzioni come malloc() e assert() e free()
    Mi dovresti rispondere tu alla domanda però..
    La assert() non centra nulla. Caso mai la realloc(). Spero sia stata solo una svista.

    Il miglior sistema per imparare e' quello di arrivarci da soli, eventualmente con un aiuto per prendere la strada giusta.

    Quindi la terza domanda e': visto che piu' o meno sai che cosa e' l'allocazione dinamica della memoria, e come si fa ad usarla, perche' non riesci a procedere?

    Anche se scrivi del codice sbagliato, quello che al massimo puo' succedere e' 1) non compila, 2) il programma non funziona. Non esplode mica una bomba!
  • Re: Allocazione dinamica della memoria in C

    migliorabile ha scritto:


    Non esplode mica una bomba!
    Eh ... ma si fa fatica ...
Devi accedere o registrarti per scrivere nel forum
7 risposte