Allocazione dinamica della memoria in C

di Anonimizzato14370 il
7 risposte
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

  • 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?
  • 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ò..
  • 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.
  • E ma non so come usarle!
  • 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!
  • migliorabile ha scritto:


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