Tem professor melhor de C??? Não tem!!! Você é fera!!
@rdcodigos32113 күн бұрын
Muito interessante, eu não conhecia o realloc vai ser muito útil nos meus projetos que utilizo o C
@Caio_ADS2 жыл бұрын
Estou cursando graduação em uma instituição "conceituada" em São Paulo SP, os professores tem conhecimento, mas com a sua didática, só conheci 2 de 20, Obrigado !
@batler12 Жыл бұрын
Boa sorte pra você amigo
@3stud06 ай бұрын
Ótima aula, como sempre!
@andersoncoelhoac83072 жыл бұрын
Parabéns pelo trabalho.
@programeseufuturo2 жыл бұрын
Obrigado 🙌
@rhyann34862 жыл бұрын
muito boa a sua didática, parabéns!
@rique0601 Жыл бұрын
Excelente aula!
@programeseufuturo Жыл бұрын
Obrigado Rique😃
@hela55342 жыл бұрын
Ótima aula! Professor, eu conseguiria "desalocar" algumas posições do vetor? Por exemplo eu uso a função malloc pra alocar 10 posições e depois uso o realloc para "desalocar" e ficar somente com 5 posições, as 5 posições finais sendo liberas?
@programeseufuturo2 жыл бұрын
Você consegue sim hela, mas precisa tomar cuidado com os dados do primeiro vetor. Tomando seu vetor de tamanho 10 como exemplo, se ele estiver todo preenchido você vai perder metade dos dados pois apenas os 5 primeiros serão copiados para o novo vetor de tamanho 5.
@MDAVID29033 жыл бұрын
Ótima aula. Direto ao ponto. Uma dúvida: Vi alguns exemplos nos quais quando da alocação de memória usando calloc e malloc , foi utilizado um casting. Porque aqui não foi necessário ? Quando é necessário e quando é dispensável o casting? Ex. com casting: int *p; p = (int *) calloc(5, sizeof(int));
@programeseufuturo3 жыл бұрын
Olá Marcel. Algum tempo atrás era necessário sempre ao alocar memória de forma dinâmica, mas com as revisões mais atuais da linguagem C isso não é mais necessário.
@MDAVID29033 жыл бұрын
@@programeseufuturo Obrigado Professor.
@aquele_frank3 жыл бұрын
Excelente conteúdo, parabéns. Tenho uma pequena dúvida. Como eu poderia "diminuir" o tamanho tamanho do vetor?
@programeseufuturo3 жыл бұрын
Obrigado Gustavo. Quanto a sua dúvida, em teoria você pode usar a função realloc também. Contudo, é preciso testar para ver o comportamento da função com um tamanho menor. Quando aumentamos a quantidade de memória para um vetor, um novo vetor é alocado na memória e todo o conteúdo do vetor original é copiado para o novo vetor. Ao diminuir o tamanho de um vetor há o risco de você perder informação se todo o vetor tiver preenchido.
@myckelrodrigues343 жыл бұрын
Professor mestre da Língua C, me diga, ainda vai ter mais aulas? Se sim, esse play list vai ta completa com quantas aulas?
@programeseufuturo2 жыл бұрын
Olá Myckel. Sim, ainda terão mais aulas, mas ainda não sei exatamente quantas, ainda tive tempo de preparar as aulas de grafos.
@brunodavis73032 жыл бұрын
Depois quando chamamos o realloc também temos que verificar se o ponteiro retornado é nulo ou não?
@programeseufuturo2 жыл бұрын
O ideal é verificar Bruno, pois como disse no outro comentário, se não for possível realocar a memória será retornado null.
@jailsonathayde742 жыл бұрын
Baita aula! Uma dúvida, se a realloc retornar erro, eu perco os 10 primeiros dados que foram gravados?
@programeseufuturo2 жыл бұрын
Rapaz... não sei rsrsrs. Eu imagino que não, mas teria que tentar forçar um erro na função para observar seu comportamento.
@ishidamatheus120210 ай бұрын
e como faz pra inserir elemento nos indiceis que estao com lixo de memoria ou zerados ?
@brunodavis73032 жыл бұрын
Usar o realloc pode ser perigos às vezes? digamos que eu chame o malloc para alocar 10 elementos de um vetor do tipo inteiro. O computador vai então procurar um lugar na memória que tenha aquela quantidade especifica livre para nós usarmos. Daí digamos que eu chame o realloc para o valor equivalente a 10000 inteiros agora. O computador vai então tentar ir nesse mesmo endereço que havia no nosso ponteiro inicial que foi criado com malloc e alocar esse espaço de 10000. Porém, e se nesse processo o computador perceber que não temos esse espaço continuo livre para armazenar nossos 10000 inteiros? vai dar um erro terrível né? Abraços professor, ótima aula.
@programeseufuturo2 жыл бұрын
É bem improvável Bruno, mas pode acontecer sim. Ao tentar realocar agora a quantidade 10000, se não for possível onde o vetor está, outra região será procurada que comporte essa capacidade. Apenas teremos erro de fato se em nenhum lugar da memória tiver essa quantidade disponível de forma contínua. Essa função pode ter vários comportamentos. Se o ponteiro para o vetor for nulo por exemplo, ela irá alocar a quantidade solicitada de memória e devolver um ponteiro para essa região de memória, perceba que neste caso ela funciona de forma muito parecida com a função malloc. Por outro lado, se o novo tamanho for zero ela libera a memória do vetor, funcionando neste caso como a função free. Por fim, se não houver memória suficiente para a alocação, um ponteiro nulo é devolvido e o bloco original é deixado inalterado.
@brunodavis73032 жыл бұрын
@@programeseufuturo entendi. Obrigado professor!
@brunodavis73032 жыл бұрын
Professor, o certo a ser colocado na linha 34 não seria "vet = realloc(vet, tam * (sizeof(int)));" em vez de "vet = realloc(vet, tam);" ?
@programeseufuturo2 жыл бұрын
Olá Bruno. Obrigado pela correção. Sim, o correto é fazer o uso do operador sizeof para obter a quantidade de memória exata para o tipo utilizado.
@antonnelly8 ай бұрын
@@programeseufuturo então, quando foi usado "vet = realloc(vet, tam);" foi alocado em memória apenas um único espaço com tamanho igual ao número que o usuário informou e, no preenchimento do novo vetor, os valores foram sendo colocados nas regiões de memórias que estão na sequência da que foi foi reservada pela realloc, né isso?
@edgardmacfadden23727 ай бұрын
@@programeseufuturo Ah bom, tava me perguntando. Mas o meu programa tava dando uma pausa toda vez que eu só usava o tam invés do sizeof(int) * tam
@rafinha02062 жыл бұрын
professor, poderia me explicar como isso é possivel, eu tava testando a função malloc e percebi que eu consigo expandir o vetor sem precisar alocar mais memória, como isso é possivel? - int tam = 5; //printf("Insira o tamanho do vetor: "); //scanf("%d", &tam); int *vet; vet = malloc(tam * sizeof(int)); for (int i = 0; i < tam; i++) { *(vet+i) = i*2; } printf(" "); for (int i = 0; i < tam; i++) { printf("%d ", *(vet+i)); } //expand vector int elemento; printf("Insira o elemento que vc quer adicionar: "); scanf("%d", &elemento); *(vet+5) = elemento; tam = tam + 1; for (int i = 0; i < tam; i++) { printf("%d ", *(vet+i)); } int vetor[5]; for (int i = 0; i < 5; i++) { //scanf("%d", &vetor[i]); } for (int i = 0; i < tam; i++) { //printf("%d", vetor[i]); }
@programeseufuturo2 жыл бұрын
Olá Rafael. A verdade é que você não está expandindo seu vetor, ele continua tendo "tam" posições. Um vetor fica organizado de forma sequencial na memória e, o que existe após a última posição do vetor? Resposta: mais memória, outras posições de memória que não pertencem ao seu vetor. O que você fez foi acessar a posição seguinte de memória após o fim do seu vetor. A linguagem C não impede isso, por isso o programador precisa sempre ter muita atenção com o tamanho das estruturas de dados como vetor e matriz. Provavelmente a posição estava vazia, por isso funcionou, mas, se por azar, aquele posição estivesse sendo usada pelo sistema operacional por exemplo, provavelmente seu programa daria erro, pois seria impedido pelo sistema operacional de acessar aquela posição, ou pior ainda, se outro programa estivesse usando aquela região de memória e você salvasse algum valor lá, você estaria sobrescrevendo informações de outro programa e poderia ocasionar erro nesse outro programa uma vez que não sabemos o que poderia estar lá.
@antonnelly8 ай бұрын
@@programeseufuturo Professor, por favor, me responda, se souber. O Sistema Operacional é quem gerencia o acesso à memória. Nesse caso aí, o SO só iria impedir o "estouro de memória" caso as posições seguintes ao último elemento do vetor estivessem alocadas para outro programa, correto?