Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15

    [C] Semplice problema con l'allocazione dinamica

    Ragazzi, scusate la banalità della domanda, ma è il mio primo esercizio con la memoria dinamica
    Il seguente codice riempie un vettore con numeri da 1 a 40, n volte (3 volte)
    Non capisco il problema, arriva al printf (infatti stampa i numeri) e poi crasha... Avrò sbagliato il free?
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
      int *mazzo;
      int i=0;
      int j=0;
      int n=3;
      int k=0;
      mazzo=malloc(sizeof(int));
      while (j<n)
      {
      while (i<40) {
      mazzo=malloc(sizeof(int));      
      mazzo[k]=i+1;
      i=i+1; 
      k=k+1;
    }
    i=0;     
    j=j+1;
    
            }  
            
            for (i=0; i<n*40; i++)
            printf("\n%d", mazzo[i]);
            free(mazzo);
    system("pause");
    return 0;    
        }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    tu non hai allocato un puntatore ad interi in grado di tenere tutta quella roba.
    Dovresti fare una roba del genere
    codice:
    mazzo=malloc(n * 40 * (sizeof(int)));
    if (mazzo == NULL) return -1; //non puoi allocare
    while (j<n) {
        while (i<40) {
            mazzo[k]=i+1;
            i=i+1;
            k=k+1;
        }
        i=0;
        j=j+1;
       }

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15
    ok grazie valia, ma non è possibile allocare elemento per elemento? quello volevo fare io...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    si ma poi questo puntatore dove te lo memorizzi? tu ogni elemento che istanzi lo butti via al ciclo successivo. Alla fine ti resta solo una variabile puntatore con l'ultimo valore inserito.
    Se invece hai un array di puntatori in cui butti via via i tuoi puntatori allora questo ha senso

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    15
    in effetti hai ragione valia! Grazie mille

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.