Aggiornamento matrice allocata dinamicamente

di il
1 risposte

Aggiornamento matrice allocata dinamicamente

Salve a tutti,
Ho un po' di problemi con la riallocazione dinamica di una matrice, in pratica devo allocare una "matrice quadrata" 1x1, e all'occorrenza aggiungere una riga e una colonna, quindi farla diventare 2x2,3x3....
Ho utilizzato un algoritmo come quello nel codice sottostante (in cui semplicemente la creo e con un ciclo for cerco di aggiungere una riga e una colonna ogni ciclo), il problema è che al lancio del programma compilato va subito in errore, credo che il sistema opertivo lo blocchi e non riesco a capire il perché.
EDIT: avevo scritto male il codice, ora c'è quello in questione


#include <stdlib.h>
#include <malloc.h>
#include <stdbool.h>
#include <stdio.h>


int **M,N;

int main(int argc, char** argv) {

	N = 1;
	M = (int**)malloc(sizeof(int*));
	M[0] = (int*)malloc(sizeof(int));

	for (int i = 0; i < 5; i++) {
		N++;
		M = (int**)realloc(M, N * sizeof(int*));
		for (int k=0; k<N; k++)
		M[k] = (int*)realloc(M, N * sizeof(int));
	}
	for (int i = 0; i < 5; i++) {
		printf("\n");
		for (int j = 0; j < 5; j++) {
			M[i][j] = 0;
			printf("%d ", M[i][j]);
		}
	}
	while (getchar() != '\n');
}

1 Risposte

  • Re: Aggiornamento matrice allocata dinamicamente

    Premesso che se i puntatori ti danno il mal di testa, i puntatori doppi ti causano ben presto una emicrania, ti consiglio di non usarli a meno che questo non sia un puro esercizio.
    A parte questa premessa l'errore dovrebbe essere nella reallocazione alla riga
    
          M[k] = (int*)realloc(M, N * sizeof(int));
    
    che va sostituita con
    
          M[k] = (int*)realloc(M[k], N * sizeof(int));
    
    guarda bene, sembrano uguali ma non lo sono
Devi accedere o registrarti per scrivere nel forum
1 risposte