Executando verificação de segurança...
3

Essa explicação cabe e está correta.

Vou tentar deixar mais claro o que eu disse. De fato existe uma situação que você pode interpretar que o objeto pode aumentar de tamanho, mas nada garante que isso vai acontecer.

Como o nome diz, o realloc() realoca o espaço onde estava o objeto, conforme meu texto expllica. Inclsuive essa função sequer modifica o objeto, só trata da alocação de memória. Ele copiará o dado para outro local, portanto terá um novo objeto. Em certo momento haverá os dois objetos na memória. Ele não mexe no objeto antigo de forma alguma.

Como agora provavelmente tem mais espaço (no exemplo que pediu para realocar para um espaço maior) então poderá fazer com que o novo objeto colocado ali será maior que o anterior. Mas é outro objeto, não é o mesmo. Pode ser idêntico, mas a cópia já garante que será outro objeto.

Conforme eu falei, é concreto. Se você tem um monte de caixas no caminhão, todas adjacentes às outras sem espaço algum sobrando entre elas, só tem espaço no fim do baú, se elas tinham 10cm3 e passa ter 12cm3, como isso é possível? O único jeito é pegar um outro espaço em local vazio para colcoar essa caixa maior, não dá para colocar onde estava aquele objeto, não tem espaço. Você pode até tirar a caixa menor de lá, mas o espaço ficará lá, até que alguém coloque outra caixa no mesmo lugar, mas essa nova caixa terá 10cm3 ou menos.

O realloc() realoca em todas as situações? Não tem nada que mande ele fazer isso, e de fato algumas implementações não mudam de lugar quando o que está pedindo de alocação tem o mesmo tamanho ou menor. Para tamanhos maiores é impossível fisicamente não mudar de lugar, a não ser que se saiba que tem um espaço sobrando ali. Nem sempre se sabe, mas se souber também é uma situação que poderá não mudar de lugar.

Só note que isso é uma otimização, não é garantido que aconteça. Se você pediu um espaço maior e conseguiu deixar no mesmo lugar você já tinha o espaço maior.

Então se você tiver espaço entre as caixas é possível colocar uma caixa maior que caiba no espaço deixado ali. Sempre será feito assim? Não. Não é problema seu se vai acontecer ou não, não conte com isso, interprete que sempre haverá a relocação da caixa. Nunca conte que seja assim só porque fez um teste e deu esse resultado.

Fiat 147 todo detonado andando pelas ruas

O realloc() sequer é sobre o objeto e sim sobre a alocação. Em C a alocação e o objeto quase se confudem. Se você tem o espaço para aumentar o objeto pode interpretar que o tamanho real do objeto é todo o espaço disponível e ele não é aumentado. O aumento real só ocorre quando se cria uma nova alocação/objeto.

Inclusive nada impede de você aumentar o tamanho do objeto sem o realloc(). C tem dessas. Só que eu não considero isso porque você está corrompendo a memória e potencialmente está sobrescrevendo em cima de outro objeto.

Se eu não posso garantir que será sempre assim, eu prefiro considerar que o aumento só ocorre, garantidamente, criando um novo objeto, o resto é lucro.

Carregando publicação patrocinada...