Я настоятельно рекомендую вам начать намного, намного проще. В программе, которую вы представили, многое происходит, но, как заметил в комментариях программист @Some, проблемы гораздо более фундаментальны, чем отсутствие вывода.
Например, начните с этого, который является небольшой частью вашей программы:
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int i;
int n;
int **M = NULL;
printf("Write the size of matrices.\n");
scanf("%d", &n);
M = malloc(sizeof(int*)*n);
for (i = 0; i < n; i++)
{
M = malloc(sizeof(int)*n);
}
for (i = 0; i < n; i++) {
printf("matrix element #%d is %d\n", i, *M[i]);
}
}
При запуске этот segfaults во втором цикле пытается получить доступ к *M[i]
. Это потому, что, как указывает один из комментариев, в 1-м цикле вы действительно хотите:
M[i] = malloc(sizeof(int)*n);
С этим исправлением программа запускается и выводит, например, :
Write the size of matrices.
5
matrix element #0 is 0
matrix element #1 is 0
matrix element #2 is 0
matrix element #3 is 0
matrix element #4 is 0
Оттуда вы можете добавить немного за раз и убедиться, что то, что происходит, - то, чего вы ожидаете, распечатав все по пути. В конце концов, по мере продолжения вы сможете отбросить некоторые из более ранних операторов распечатки, чтобы вывод был сосредоточен только на той части, которую вы недавно добавили или изменили.
Вы можете медленно создать резервную копию функции, которую вы пытаетесь написать, но есть много основ, которые вам необходимо понять в первую очередь. Начните с простого, сделайте небольшие дополнения и выведите все. Это поможет вам понять ваш код и позволит понять, в чем дело.