Informática, perguntado por yamazukfilmes77, 4 meses atrás

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

Respondido por btotta
12

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.


ceverto11: a função malloc retorna para um ponteiro o endereço de um espaço na memoria não ao contrário... então acredito que seja a alternativa 1 I e II apenas.
btotta: "The malloc() and calloc() functions return a pointer to the allocated memory, which is suitably aligned for any built-in type. On error, these functions return NULL." Essa definição achei pesquisando "c malloc manpage" .. o que quer dizer é, o malloc vai retornar um ponteiro que aponta para o espaço reservado ou "NULL" se tiver um erro, por isso acredito que que a afirmação 3 é verdadeira também.
Respondido por yancarvalho3
1

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

Anexos:
Perguntas interessantes