PDA

Visualizza la versione completa : [C++] Correttezza del codice di allocazione dinamica


kimeras89
19-01-2009, 16:11
ciao a tutti...volevo un consiglio sperando di non violare in nessun modo il regolamento...
Questo codice per l' allocazione di una matrice dinamica è corretto??
grazie...




#include <cstdlib>
#include <iostream>
using namespace std;
typedef char T;
void inserisci_matrice (T* & , const int ,const int );

int main(int argc, char *argv[])
{ int n,m;
T * Pmat;
cout << "\n inserisci gli indici dell Array"<< "\n numero di righe:";
cin >> n; cout << "\n numero di colonne:"; cin >> m;
Pmat = new T [n*m];
inserisci_matrice (Pmat,n,m);
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
cout <<"\n elemento"<<i<<","<<j;
cout<< Pmat [i*m+j];
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
void inserisci_matrice (T* &MatP , const int n,const int m){
cout <<"\n inserisci gli elementi della matrice:";
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
cout <<"\n elemento"<<i<<","<<j;
cin >> MatP [i*m+j];
}
}
}


P.S. Per la stampa del vettore potrebbe essere fatta un altra funzione...ma dovrebbe essere lo stesso...

LeleFT
19-01-2009, 17:37
Per il futuro:

1) Indica il linguaggio utilizzato nel titolo (obbligatorio)
2) Posta il codice all'interno degli appositi tag
e così da mantenerlo indentato e leggibile
3) Cerca di rendere più preciso il titolo delle discussioni.

Ho corretto tutto io.


Ciao. :ciauz:

shodan
19-01-2009, 18:23
L'allocazione va bene. E' la deallocazione che lascia a desiderare.
P.S. Che utilità ha quel typedef char T?

kimeras89
19-01-2009, 18:40
il typedef char T serve nel caso in cui si voglia cambiare il tipo di array...invece di un array di caratteri farne uno di interi, reali...ecc...in questo modo non devi modificare in ogni sottoprogramma...
comunque...per la deallocazione come potrei migliorarlo??
grazie :ciauz:

shodan
19-01-2009, 18:55
Piu che altro dovresti inserirla. Prima del system("PAUSE"); metti delete[] Pmat.

Per il typedef. Non per scoraggiarti ma messo così non serve a granché.
Non si può ridefinire un typedef, quindi appena scriverai:
typedef int T sotto a typedef char T, con l'idea di riutilizzare il codice, otterrai solo un errore di compilazione.

Quel che vuoi fare si ottiene con i template, ma non sapendo quanto li conosci preferisco evitare approfondimenti prematuri.

kimeras89
19-01-2009, 19:12
Ma lo scopo non è di mettere un nuovo typedef con lo stesso nome...
Se ad esempio devo fare un altro programma dove serve la stessa funzione di inserimento vettore dove però il vettore non sia di caratteri ma di interi mi basta cancellare char e mettere int...in questo modo non andrò a modificare char in tutte le funzioni...
torna utile se le funzioni sono parecchie basta fare copia e incolla ed il gioco è fatto...
comunque grazie per il consiglio...
:) :ciauz: :ciauz:

Loading