Problemas com alocação dinâmica

Problemas com alocação dinâmica

por William Amorim -
Número de respostas: 2
Professor, estou fazendo o EP 2 e estou com um problema com
alocação dinâmica. Eu fiz esse programa abaixo para testar a minha
função "Malloc", mas não consigo encontrar o erro. Quando eu vou
rodar o programa (no Devc++), aparece uma mensagem de erro logo
após que eu entro com o número de colunas e a janela é fechada.
Você pode me dar uma luz?




>> #include <stdio.h>
>> #include <stdlib.h>
>>
>>
>> void Malloc(int nL, int nC, char **M) {
>>
>> int l;
>>
>> M = (char**)malloc(nL * sizeof(char*));
>>
>> for(l = 0; l < nL; l++)
>> M[l] = (char*)malloc(nC * sizeof(char));
>>
>> }
>>
>>
>> int main () {
>>
>> int i, j, nL, nC;
>> char **M;
>>
>> printf("\nlinhas:");
>> scanf("%d", &nL);
>>
>> printf("\ncolunas:");
>> scanf("%d", &nC);
>>
>> Malloc(nL, nC, M);
>>
>> printf("\nmatriz:");
>>
>> for(i=0; i<nL; i++)
>> for(j=0; j<nC; j++) {
>> printf("\nPosicao %d,%d:", i, j);
>> scanf(" %c",&M[i][j]);
>> }
>>
>> printf("\n\n");
>>
>> for(i=0; i<nL; i++)
>> for(j=0; j<nC; j++) {
>> printf("\nPosicao %d,%d: %c", i, j, M[i][j]);
>> }
>>
>> printf("\n\n");
>> system("PAUSE");
>>
>> return 0;

Em resposta à William Amorim

Re: Problemas com alocação dinâmica

por Carlos Hitoshi Morimoto -
eu dei a função malloc2D em sala de aula, você tentou aquela função.
O problema é que você está passando o valor do ponteiro e não o ponteiro em si, ou seja, o ponteiro não é alterado, e pior, o que a função tenta alterar é um local ilegal (pois não tem valor).
Uma outra recomendação, sempre que você fizer um malloc, teste se o ponteiro devolvido é nulo ou nao, como fazemos em aula.
ht