Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c+] Allocazione dinamica di una matrice

    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
    codice:
    #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)
    Codice PHP:
    Errori
    1
    >.\main.cpp(15) : error C2143errore di sintassi')' mancante prima di ';'
    1>.\main.cpp(15) : error C2143errore di sintassi']' mancante prima di ')'
    1>.\main.cpp(15) : error C2059errore di sintassi')'
    1>.\main.cpp(15) : error C2143errore di sintassi';' mancante prima di ']'
    1>.\main.cpp(15) : error C2143errore 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
    Codice PHP:
    Errore
    1
    >.\main.cpp(14) : error C2440'inizializzazione'impossibile convertire da 'int (*)[20]' 'int *'
    1>        I tipi a cui si punta sono privi di relazioniLa conversione richiede reinterpret_castcast di tipo C o cast di tipo funzione 
    Come mai?
    Come si allora la memoria correttamente?

  2. #2
    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 da 16.16 a 16.20.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.