Dubbio

di il
2 risposte

Dubbio

Buonasera

Avrei un dubbio con un programma che in poche parole prende in un input una matrice di N righe ed M colonne, più un numero intero X e un puntatore ad intero. Io devo restituire una nuova matrice che contenga SOLAMENTE le righe della matrice originale in cui compare il numero X, ed assegnare al puntatore il numero di righe copiate.

Avevo pensato a questo
#include <stdio.h>
#include <stdlib.h>

int** estrai(int** mat, int n, int m, int x, int* p){
	int** mat2=(int**) malloc (sizeof(int*));
	int contatore=0;
	int i=0;
	int l=0;
	int a=1;
	for (i;i<n; i++) {
		for (l; l<m; l++) {
			if (mat[i][l]==x) {
				mat2[contatore]=mat[i];
				a++;
				*(mat2)=realloc(*(mat2),sizeof(int*)*a);	
				contatore++;
				i++;
			}
		}
	}
*p=contatore;
return mat2;
}
Il problema si presenta quando c'è una riga che non contiene un elemento uguale ad X, poichè la funzione si interrompe. Come potrei risolvere? Grazie in anticipo.

2 Risposte

  • Re: Dubbio

    Int** mat2=(int**) malloc (sizeof(int*));

    Così allochi il puntatore a un puntatore a intero. Dovresti indicare di quanto vuoi la matrice, ad esempio:

    int** mat2=(int**) malloc (n*sizeof(int*));
  • Re: Dubbio

    Ci sono molti punti sbagliati nella funzione ...

    Le variabili nelle for devono essere correttamente inizializzate ... quindi
    
       for (i=0; i<n; i++) {
          for (l=0; l<m; l++) {
    
    Non si capisce se il valore X cercato deve essere presente in TUTTI gli elementi di una riga perché questa sia copiata o ALMENO in un elemento. O si debbano copiare solo gli elementi che presentano il valore X (magari sarebbe bene presentare un esempio di matrice in input e un esempio della corrispondente matrice in output).

    Le malloc e realloc sono sbagliate.
Devi accedere o registrarti per scrivere nel forum
2 risposte