|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 55
|
[C]Allocazione matrice passata in una funzione
Salve a tutti, ho un problema con l'allocazione dinamica di una matrice:
Codice:
#include <stdio.h>
#include <stdlib.h>
int readf(char **m);
int r, c;
int main()
{
char **s;
int i, j;
readf(s);
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%c", s[i][j]);
}
printf("\n");
}
return 0;
}
Codice:
int readf(char **m)
{
FILE *input;
char ch;
int i, j, k;
input=fopen("campo.txt", "r");
fscanf(input, "%d %d", &r, &c);
m=malloc(r*sizeof(char*));
for(i=0;i<r;i++)
{
m[i]=malloc(c*sizeof(char));
for(j=0;j<c;j++)
{
fscanf(input, "%c", &m[i][j]);
printf("%c", m[i][j]);
}
fscanf(input, "%c", &ch);
printf("%c", ch);
}
return 0;
}
Mi potreste dire dove sbaglio? Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2004
Città: Nord-Est
Messaggi: 5161
|
Tempo fa ebbi lo stesso problema e l'ho risolto così:
Nel main dichiaravo questa matrice: long double **big_data_matrix; Nel main chiamavo la funzione in questo modo: read_informations(directory, &big_data_matrix, &informations_vector, &complementary_info); [nell'header la funzione read_informations era dichiarata come:] void read_informations(char *directory, long double ***big_data_matrix, int **informations_vector, long double **complementary_info); E dentro la funzione read_informations facevo: long double **big_data_matrixs; big_data_matrixs=new long double*[rows]; for(i=0; i<rows; i++) { big_data_matrixs[i]=new long double[columns]; } lavoravo sulla matrice e poi, prima della parentesi che chiude la read_informations: *big_data_matrix=big_data_matrixs; A me così funzionava e funziona. Allo stesso modo si effettua la delete per rimuovere la matrice dalla memoria. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 55
|
Grazie, avrei più che altro voluto capire come allocare direttamente la matrice del main invece che allocarne una temporanea e poi far puntare quella del main a quella "temporanea", ma almeno adesso funziona! Grazie ancora.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2004
Città: Nord-Est
Messaggi: 5161
|
Quando scrissi quel programma mi veniva comodo allocare e deallocare le matrici dentro le varie funzioni solo quando necessario, in modo da minimizzare il consumo di memoria. Onestamente non pensai neanche al caso da te indicato, cmq credo che sia fattibile. Non sono così esperto da dirti esattamente come, però con i puntatori ed i passaggi per reference secondo me si può fare.
Felice di esserti stato utile |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:26.



















