come faccio a scrivere una funzione che ritorna una matrice? Mi fate un piccolo esempio.
Grazie mille
come faccio a scrivere una funzione che ritorna una matrice? Mi fate un piccolo esempio.
Grazie mille
ke matrice?Originariamente inviato da yagorossi
come faccio a scrivere una funzione che ritorna una matrice? Mi fate un piccolo esempio.
Grazie mille
per esempio una matrice 10*10 della tavola pitagorica delle tabelline.
Vi propongo un'esempio in C++, credo vada bene lo stesso.
Visto che sto studiando da poco il C++, vi faccio notarecodice:// file Matrice.cpp #include <iostream> using namespace std; int** tabellina(int righe, int colonne); int** tabellina(int righe, int colonne) { int** matrice = new int*[righe]; for (int i = 0; i < righe; i++) { matrice[i] = new int[colonne]; for (int j = 0; j < colonne; j++) { matrice[i][j] = (i + 1) * (j + 1); } } return matrice; } int main() { cout << "Tabellina Automatica" << endl; int righe, colonne; // raccolta dati cout << "Numero di righe: "; cin >> righe; cout << "Numero di colonne: "; cin >> colonne; // mostra risultato int** matrice = tabellina(righe, colonne); for (int i = 0; i < righe; i++) { for (int j = 0; j < colonne; j++) { cout << matrice[i][j] << " "; } cout << endl; } // dealloca memoria for (int i = 0; i < righe; i++) { delete[] matrice[righe]; } delete[] matrice; return 0; }
che alcune volte restituisce un Segmentation Fault;
SEG_FAULT matrice(3,3)
SEG_FAULT matrice(3,4)
OK matrice(4,3);
Non ho capito ancora perchè. Potete chiarirmelo?
Il programma è stato compilato con g++-3.3.3 su Linux.
Ciao.
Slack? Smack!
qualcuno mi corregga se ho sbagliato...........
ma basta fare questo per non avere quell'errore.........
// dealloca memoria
for (i = 0; i < righe; i++) {
delete[] matrice[i]; //NO matrice[righe]
}
delete[] matrice;
Indipendentemente che tu la costruisca come int *matrix o int **matrix basta che prima le allochi lo spazio dinamicamente (cosi sopravvive alla funzione) e che ritorni matrix
Live fast. Troll hard.
Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
Team Lead @Gameloft Barcelona
No scancode, perchè righe in matrice[righe]
va fuori dei limiti dell'array/spazio allocato.
Per dirla alla java verrebbe sollevata
un'ArrayIndexOutOfBoundException.
Sempre che non stia sbagliando io, adesso. :tongue:
Slack? Smack!
Ciao infinitejustice, a chi è riferita la tua risposta?
Slack? Smack!
E' giusto come ho postato ovvero la riga dell'errore è:
matrice[righe] ........ infatti
questo codice è giusto gira bene sotto win con vc6 in console:
// dealloca memoria
for (i = 0; i < righe; i++) {
delete[] matrice[i]; //NO matrice[righe]
}
delete[] matrice;
..... non dà errori
l'errore è nel ciclo for dove righe è il numero delle righe (se per esempio righe=4), che hai digitato per allocare new int*[righe]; e
delete[] matrice[i];
ti dealloca le 4 righe allocate per new
......non puoi fare
delete[] matrice[righe]; questo ti deallocherebbe solo la quarta allocazione di memoria, infatti perchè adoperare un for se solo bastasse fare delete[] matrice[righe]; ????????
ti è chiaro??
forse sbaglio io, ma in programmazione basta fare la verifica non solo l'ipotesi..... e a me la verifica funziona in quanto non ho errori.
a chi ha iniziato il thread. Se allocata dinamicamente la memoria sopravvive alla funzione e quindi basta ritornare il puntatore.Originariamente inviato da Sergio Pedone
Ciao infinitejustice, a chi è riferita la tua risposta?
codice:#include <stdio.h> #include <stdlib.h> #include <time.h> int **miaFunz(int, int); void main(int argc, char **argv){ int **myMatrix = miaFunz(5, 3); } int **miaFunz(int m, int n){ int i, j, **matrix; if(!(matrix = (int **)malloc(m*sizeof(int *)))) abort(); for(i = 0, srand(time(NULL)); i < m; i++){ *(matrix+i) = (int *)malloc(n*sizeof(int)); for(j = 0; j < n; j++) *((*(matrix+i))+j) = rand()%100; } return matrix; }
Live fast. Troll hard.
Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
Team Lead @Gameloft Barcelona