PDA

Visualizza la versione completa : [c+] Allocazione dinamica di una matrice


theboss280489
28-04-2010, 11:36
Salve a tutti, vorrei allocare dinamicamente una matrice il più semplicemente possibile!
La traccia mi dice di allocare dinamicamente due matrici, di permettere l'inserimento dei numeri interi, di calcolare la media delle diagonali principali e secondarie, e di allocare dinamicamente una matrice C ottenuta dal prodotto righe per colonne di A B.
Le matrici A B hanno entrambe dimensione N=20
Ecco il codice relativo esclusivamente all'allocazione


#include <iostream>
#include <stdlib.h>
#define N 20;
using namespace std;
int main() {
int* matriceA = new int[N][N]; 1
int* matriceB = new int[N][N]; 2
int* matriceC = new int[N][N]; 3
}

Eseguendo il codice il compilatore mi da degli errori strani:
in particolare mi dice che su ogni rigo di allocazione (1,2,3)

Errori
1>.\main.cpp(15) : error C2143: errore di sintassi: ')' mancante prima di ';'
1>.\main.cpp(15) : error C2143: errore di sintassi: ']' mancante prima di ')'
1>.\main.cpp(15) : error C2059: errore di sintassi: ')'
1>.\main.cpp(15) : error C2143: errore di sintassi: ';' mancante prima di ']'
1>.\main.cpp(15) : error C2143: errore di sintassi: ';' mancante prima di ']'

Ovviamente ripetuti per ogni riga.

Nella mia logica non ho fatto altro che inizializzare un puntatore int* matriceA al primo elemento della matrice [0][0] che ho allocato dinamicamente.
Perché ho gli errori?
Successivamente ho provato a sostituire quel N con 20
Ora per ogni riga (1 2 3) ho questo errore

Errore
1>.\main.cpp(14) : error C2440: 'inizializzazione': impossibile convertire da 'int (*)[20]' a 'int *'
1> I tipi a cui si punta sono privi di relazioni. La conversione richiede reinterpret_cast, cast di tipo C o cast di tipo funzione

Come mai?
Come si allora la memoria correttamente?

MItaly
28-04-2010, 11:43
Il problema è che un array multidimensionale non può essere rappresentato come un semplice puntatore, dato che quest'ultimo non può essere usato per accedere ai membri tramite più operatori [].
Comunque, la questione non è semplcissima, ti consiglio di leggerti qui (http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.16) da 16.16 a 16.20.

theboss280489
28-04-2010, 15:40
Ho dato un'occhiata ma non sembra cambiare molto.
L'allocazione avviene tramite questo comando solo che ha già definito la FRED come una matrice (almeno penso)
Fred* matrix = new Fred[nrows * ncols];
Il problema è come fare poi per gestire i vari elementi presenti all'interno?

Loading