|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2011
Messaggi: 17
|
[C]Problema allocazione dinamica di matrice
ragazzi una mano per l'allocazione dinamica di una matrice
Questo è il testo dell'esercizio: Codice:
/*A partire da una matrice A(MxN), del tipo sotto indicato, alloca per righe 1)staticamente 2)dinamicamente visualizzare gli eleminti per colonne*/ 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(); } |
![]() |
![]() |
![]() |
#2 |
Junior Member
Iscritto dal: May 2011
Messaggi: 17
|
trovato, non ho racchiuso tra graffe un for
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Indentate in modo decente... almeno gli errori di graffe li sgamate al volo.
![]()
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: May 2011
Messaggi: 17
|
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 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); } |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
È errata l'operazione sulla matrice:
matrice + (i * N) + j;
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO Ultima modifica di GByTe87 : 27-05-2011 alle 15:11. |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2011
Messaggi: 39
|
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 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:11.