Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Alocação Dinâmica da Memória

Eu estava estudando a função malloc. Para entender melhor o uso da função, criei o código abaixo:

int main(){


    int* array = malloc(sizeof(int)*2);

    array[0] = 1;
    array[1] = 2;
    array[2] = 3;

    for (int i=0; i<3; i++){
        printf("%d\n", array[i]);
    }

    free(array);
}

Eu esperava que fosse dar erro, já que eu somente reservei, através da função malloc, espaço para 2 inteiros, e no corpo do programa fiz atribuição de valores para 3 inteiros. No entanto, ao contrário do que eu esperava, o programa funcionou normalmente. Alguém saberia explicar o motivo?

2 respostas
solução!

Eis o grande problema: o C nao verifica se você está acessando posicoes da memória que poderia acessar. Você pode até mesmo acessar a posição -1.

Ele reserva realmente só dois espaços. Sua memoria fica assim +-:

algoda memoria[ espaco 1,  espaco 2]  outracoisadamemoria

Quando você escreve na 3a posicao, adivinha? Ele escreve em cima de um pedaço do outracoisadamemoria! Sem nem pedir licença! Claro, em alguns casos essa região da memória pode ser inacessível ao seu programa (ou ser algo vital para o programa) e você leva um segmentation fault.

Esse é o desafio de trabalhar com linguagens que não tem gerenciadores de memória. No C existem biblitoecas que podem te auxiliar nesse trabalhar e evitar que você acesse posições "indevidas"

Muito obrigado, Paulo. Agora entendi melhor como funciona a alocação da memória!!!