Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [C] Allocazione dinamica della memoria

    Ragazzi, volevo vedere come funzionava l'allocazione dinamica ed ho provato a fare questo semplice script:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    int main()
    {
        int i, yn, elem, dimint, dimarr, *array;;
        printf("Inserire il numero di elementi interi (intero):\n");
        scanf("%i", elem);
        dimint = sizeof(int);
        dimarr = elem * dimint;
        array = (int *)malloc(dimarr);
        if(array == NULL)
        {
            printf("Memoria insufficente per allocare %i elementi", elem);
            system("PAUSE");
        }
        printf("Vuoi inserire il loro valore uno alla volta (digita 1)\nOppure lasciare assegnare il valore al programma? (digita 2)\n");
        scanf("%i", yn);
        if(yn == 1)
        {
            for(i = 0; i < elem; i++)
            {
                  printf("Valore array[%i] (intero): ", i);
                  scanf("%i", array[i]);
                  printf("\n");
            }
        }
        else
        {
            for(i = 0; i < elem; i++)
            {
                  array[i] = i;
            }
        }
        for(i = 0; i < elem; i++)
        {
            printf("array[%i] = %i\n", i, array[i]);
        }
        printf("Allocati per l'array personalizzato: %i byte\n", dimarr);
        system("PAUSE");
        return 0;
    }
    La compilazione va a meraviglia, ma quando avvio il programma ad un certo punto si blocca a causa di un "errore di segmentazione", da cosa e' dovuto?

  2. #2
    -La scanf richiede l'indirizzo della variabile
    -Quando allochi una arry di interi devi moltiplicare la dim dell'array per la dimensione in byte di un intero
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    int main()
    {
        int i, yn, elem, dimint, dimarr, *array;;
        printf("Inserire il numero di elementi interi (intero):\n");
        scanf("%i", &elem);
        dimint = sizeof(int);
        dimarr = elem * dimint;
        array = (int *)malloc(dimarr* sizeof(int));
        if(array == NULL)
        {
            printf("Memoria insufficente per allocare %i elementi", elem);
            system("PAUSE");
        }
        printf("Vuoi inserire il loro valore uno alla volta (digita 1)\nOppure lasciare assegnare il valore al programma? (digita 2)\n");
        scanf("%i", &yn);
        if(yn == 1)
        {
            for(i = 0; i < elem; i++)
            {
                  printf("Valore array[%i] (intero): ", i);
                  scanf("%i", &array[i]);
                  printf("\n");
            }
        }
        else
        {
            for(i = 0; i < elem; i++)
            {
                  array[i] = i;
            }
        }
        for(i = 0; i < elem; i++)
        {
            printf("array[%i] = %i\n", i, array[i]);
        }
        printf("Allocati per l'array personalizzato: %i byte\n", dimarr);
        system("PAUSE");
        return 0;
    }
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Originariamente inviato da unomichisiada
    -La scanf richiede l'indirizzo della variabile
    -Quando allochi una arry di interi devi moltiplicare la dim dell'array per la dimensione in byte di un intero
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    int main()
    {
        int i, yn, elem, dimint, dimarr, *array;;
        printf("Inserire il numero di elementi interi (intero):\n");
        scanf("%i", &elem);
        dimint = sizeof(int);
        dimarr = elem * dimint;
        array = (int *)malloc(dimarr* sizeof(int));
        if(array == NULL)
        {
            printf("Memoria insufficente per allocare %i elementi", elem);
            system("PAUSE");
        }
        printf("Vuoi inserire il loro valore uno alla volta (digita 1)\nOppure lasciare assegnare il valore al programma? (digita 2)\n");
        scanf("%i", &yn);
        if(yn == 1)
        {
            for(i = 0; i < elem; i++)
            {
                  printf("Valore array[%i] (intero): ", i);
                  scanf("%i", &array[i]);
                  printf("\n");
            }
        }
        else
        {
            for(i = 0; i < elem; i++)
            {
                  array[i] = i;
            }
        }
        for(i = 0; i < elem; i++)
        {
            printf("array[%i] = %i\n", i, array[i]);
        }
        printf("Allocati per l'array personalizzato: %i byte\n", dimarr);
        system("PAUSE");
        return 0;
    }
    Grazie, il problema e' solo la &, se ci fai caso non c'e' bisogno di moltiplicare, l'ho fatto prima.
    Una domanda, con l'allocazione dinamica posso cambiare il nome di una variabile?

  4. #4
    Originariamente inviato da pop killer
    Grazie, il problema e' solo la &, se ci fai caso non c'e' bisogno di moltiplicare, l'ho fatto prima.
    Una domanda, con l'allocazione dinamica posso cambiare il nome di una variabile?
    Hai ragione mi è sfuggito perchè io faccio sempre nell'altro modo.In che senso? Se ho capito bene la risposta e no cmq.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Ragazi, e per un array di stringhe da input? come posso fare?

  6. #6
    Originariamente inviato da pop killer
    Ragazi, e per un array di stringhe da input? come posso fare?
    Cioè acquisire un array di stringhe in una solo botta da tastiera? Potresti far inserire all'utente una stringa unica con le stringhe che ti interessano separate da uno spazio,recuperare la stringa con gets in un buffer molto grande e poi parsare il buffer con sscanf (la doppia s non è casuale)
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Originariamente inviato da unomichisiada
    Cioè acquisire un array di stringhe in una solo botta da tastiera? Potresti far inserire all'utente una stringa unica con le stringhe che ti interessano separate da uno spazio,recuperare la stringa con gets in un buffer molto grande e poi parsare il buffer con sscanf (la doppia s non è casuale)
    In parole terrene? Potresti farmi vedere uno script? Non si puo' fare come ho fatto prima ma togliendo gli interi e mettendo i char?

  8. #8
    Originariamente inviato da pop killer
    In parole terrene? Potresti farmi vedere uno script? Non si puo' fare come ho fatto prima ma togliendo gli interi e mettendo i char?
    Ma non ho capito,una sola stringa o un array di stringhe?
    Per una sola stringa:
    codice:
     char stringa[80];
     scanf("%s", stringa);
    Nota che con le stinghe non ci vuole la &
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  9. #9
    Originariamente inviato da unomichisiada
    Ma non ho capito,una sola stringa o un array di stringhe?
    Per una sola stringa:
    codice:
     char stringa[80];
     scanf("%s", stringa);
    Nota che con le stinghe non ci vuole la &
    No no no credo che non ci siamo capiti, in sostanza vorrei fare questa cosa:

    Chiede un numero;
    crea un array con capienza il numero dato prima
    chiede numero stringhe, una alla volta
    salva le stringhe su array[0], array[1], e via di scorrendo, e le stampa.

    In sostanza ci vorrebbe un array multiplo, oppure qualcos'altro... consigli?

  10. #10
    Originariamente inviato da pop killer
    No no no credo che non ci siamo capiti, in sostanza vorrei fare questa cosa:

    Chiede un numero;
    crea un array con capienza il numero dato prima
    chiede numero stringhe, una alla volta
    salva le stringhe su array[0], array[1], e via di scorrendo, e le stampa.

    In sostanza ci vorrebbe un array multiplo, oppure qualcos'altro... consigli?
    Ok questo volevo capire.Allora dovè il problema? Devi solo fare una scanf per chiedere il numero di stringhe, allocare un array di stringhe dinamicamente e poi fare un ciclo for da zero al numero che hai acquisito prima in cui in ogni iterazione fai una scanf del tipo scanf("%s",array[i]);Tutto chiaro?O no? se no sii più specifico, non sai fare l'allocazione dinamica dell'array di stringhe o cosa?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.