PDA

View Full Version : [C] Semplice problema con l'allocazione dinamica


Split91
24-05-2011, 17:48
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;
}

GByTe87
24-05-2011, 17:55
Al volo: così facendo stai allocando un solo intero, non un array.

mazzo = (int *) malloc (40 * sizeof(int));

Non ho controllato se ci sono altri errori.

Split91
24-05-2011, 18:00
GByTe87 nn va ancora... cmq io voglio allocare elemento per elemento nel vettore, nn è possibile?

WarDuck
24-05-2011, 18:11
Dovresti indentare meglio il codice...

Poi cosa significa allocare elemento per elemento il vettore?

Se hai bisogno di un vettore di 40 elementi, li allochi tutti in una volta ;).

Comunque sbagli il ciclo for alla fine, la condizione i < n*40, unita al codice nel for, implica l'accesso ad un vettore di 120 elementi, quando tu ne allochi uno di 40!