Oi Thiago,
Complementando o que o Victor descreveu.
O seu programa está com algum erro...
Por sorte ou por azar o erro não está se manifestando no MAC, mas ele está lá.
Vou ilustrar isto com um exemplo.
O programa a seguir pretende calcular a soma de uma sequência de números inteiros
terminada por um zero (Problema 1 de MAC0110, acho).
int main()
{
int soma;
int numero;
printf("Digite um numero: ");
scanf("%d", &numero);
while (numero != 0)
{
soma += numero;
printf("Digite um numero: ");
scanf("%d", &numero);
}
printf("Soma = %d\n", soma);
return 0;
}
Esse programa "funciona" no Ubuntu e não "funciona" no Windows.
Nas últimas distribuições linux do Ubuntu, talvez por questões de segurança, as variáveis com zero.
Este comportamento não é definido pela linguagem e portanto não podemos
contar com isso (como ocorre em outras linguagens).
Bem, voltando ao EP (e as notas de aula).
Nas notas de aula da AULA 07 o seguinte trecho de código
é apresentado para alocar uma matrz:
int **a;
int i;
a = mallocSafe(m * sizeof(int *));
for (i = 0; i < m; i++)
a[i] = mallocSafe(n * sizeof(int);
Entretanto, nas notas de aula eu não escrevi como liberar essa área.
Acrescentarei o trecho a seguir às notas de aula.
Notem que os passos para liberar são os inversos aos da alocação.
Acho que isto é essencialmente o que o Caio e o Gustavo sugeriram.
for (i = 0; i < m; i++)
free(a[i]); /* libera cada linha da matriz */
free(a); /* libera o vetor de ponteiros para as linhas */