PDA

View Full Version : [C]Problema allocazione dinamica di matrice


devil_prince
26-05-2011, 15:48
ragazzi una mano per l'allocazione dinamica di una matrice
Questo è il testo dell'esercizio:
/*A partire da una matrice A(MxN), del tipo sotto indicato, alloca per righe
1)staticamente
2)dinamicamente
visualizzare gli eleminti per colonne*/
Ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#define M 4
#define N 6

void main ()
{
int i,j, matriceA[M][N]={{11,12,13,14,15,16},
{21,22,23,24,25,26},
{31,32,33,34,35,36},
{41,42,43,44,45,46}};
int *matriceB;
printf("Ecco la matrice allocata staticamente\n");
for(j=0;j<6;j++){
printf("%d ",matriceA[0][j]);
printf("%d ",matriceA[1][j]);
printf("%d ",matriceA[2][j]);
printf("%d\n",matriceA[3][j]);}
i=0; j=0;
matriceB=(int *)malloc(M*N*sizeof(int));
printf("Ecco la matrice allocata dinamicamente\n");
for(i=0;i<M;i++){
for(j=0;j<N;j++)
*(matriceB+i*N+j)=matriceA[i][j];
printf("%d ",*(matriceB+i*N+j));}
fflush(stdin); getchar();
}
il programma và, ma i valori che mi risultano stampati dalla allocazione dinamica sono tutti sballati...consigli??

devil_prince
26-05-2011, 15:53
trovato, non ho racchiuso tra graffe un for :sofico:

GByTe87
26-05-2011, 16:05
Indentate in modo decente... almeno gli errori di graffe li sgamate al volo. :cry:

devil_prince
27-05-2011, 14:57
no ma nel forum l'ho copiata male non sò perchè...
cmq ora il problema è un altro...l'allocazione dinamica non và bene...mi copia alcuni numeri diversi.
Passo il codice
#include <stdio.h>
#include <stdlib.h>
#define M 4
#define N 6

void main ()
{
int *matriceB, i,j, matriceA[M][N]={{11,12,13,14,15,16},
{21,22,23,24,25,26},
{31,32,33,34,35,36},
{41,42,43,44,45,46}};
printf("Ecco la matrice allocata staticamente\n");
for(i=0;i<M;i++){
for(j=0;j<N;j++){
printf("%d\t",matriceA[i][j]);}
}
puts("\n");
matriceB=malloc(M*N*sizeof(int));
if (matriceB != NULL){
printf("Ecco la matrice allocata dinamicamente\n");
for(i=0;i<M;i++){
for(j=0;j<N;j++)
{*(matriceB+i*N*j) = matriceA[i][j];
printf("%d\t",*matriceB+i*N*j);}
}
}
free(matriceB);
}

GByTe87
27-05-2011, 15:05
È errata l'operazione sulla matrice:

matrice + (i * N) + j;

BlackShark92
27-05-2011, 15:48
ma infatti, perchè non continui a usare la notazione con le quadre? meglio che scrivi
matriceB[i][j]=matriceA[i][j]...inoltre ti consiglio di usare la calloc, che inizializza anche la memoria