A função malloc() significa alocação de memória. É uma função usada para alocar um bloco de memória dinamicamente. Ele reserva um espaço de memória de tamanho especificado e retorna o ponteiro nulo apontando para o local da memória. O ponteiro devolvido é geralmente de tipo vazio. Significa que podemos atribuir função malloc a qualquer ponteiro.
Partindo da definição apresentada, analise a linha de código a seguir:
ptr = (int *) malloc (50)
Após a leitura do texto e análise do código é possível compreender que:
I. Quando esta declaração é executada com sucesso, um espaço de memória de 50 bytes é reservado.
II. O endereço do primeiro byte de espaço reservado é atribuído ao ponteiro ptr de tipo int.
III. Esta função retorna um ponteiro para a memória alocada ou NULL se a solicitação falhar.
IV. Quando um espaço na memória é reservado de forma dinâmica, seu valor é inicializado tal qual na declaração de uma variável estática.
É correto o que se afirma em:
Alternativas
Alternativa 1:
I e II, apenas.
Alternativa 2:
II e III, apenas.
Alternativa 3:
I, II e III, apenas.
Alternativa 4:
II, III e IV, apenas.
Alternativa 5:
I, II, III e IV.
Soluções para a tarefa
Resposta:
Alternativa 3: I, II e III, apenas.
Explicação:
I) Nessa linha de código, malloc vai retornar um espaço de 50 bytes de memoria e o "(int *)" vai fazer o typecast (mudar o tipo do ponteiro) para um inteiro para serem armazenados int's na variavél. (pag 29)
II) Quando um endereço é reservado pela chamada do malloc o mesmo retorna o endereço para o primeiro byte do espaço reservado(ou null se der erro). Então nesse caso "ptr" recebe o primeiro endereço e "(int *)" converte ou faz o 'typecast' do ponteiro para um int. (não encontrei a pagina).
III) Como explicado na resp 2, a função retorna um ponteiro do tipo int que aponta para o primeiro endereço do espaço reservado, que posteriormente pode receber por atribuição um valor.
IV) "No entanto, quando um espaço na memória é reservado de forma dinâmica, seu valor não é inicializado tal qual na declaração de uma variável estática - pag29"
Na alocação dinamica podemos ter ponteiros para espaços na memoria que já possuam dados de outros programas ou sistema operacional, conforme explica a pagina em questrão.
A alternativa que apresenta o comportamento da função malloc() na linguagem de programação C é a alternativa 3: I, II e III.
Mas por que essa é a alternativa correta?
Na primeira afirmativa é falado que a função malloc() ao ser executada com sucesso, reserva 50 bytes de memória, isto é uma afirmação correta e está na documentação da linguagem de programação C.
Na segunda afirmativa é falado que o primeiro byte do ponteiro é do tipo "int", essa afirmativa também está correta pois como foi mostrado na função acima, o ponteiro (ptr) está recebendo uma alocação do tipo inteiro (int).
Na terceira afirmativa é falado que se a alocação falhar retornará um valor nulo (NULL), essa afirmativa também está correta e é bem descrita na documentação da linguagem de programação C.
Já na quarta afirmativa é falado que é possível mudar a reserva de espaço de variável de dinâmico para estático, esta afirmativa está incorreta pois não é possível.
Saiba mais sobre ponteiros aqui: https://brainly.com.br/tarefa/48782301
#SPJ2