Curso de Programação C | Como aumentar o tamanho de um vetor com a função realloc? | Aula 200

  Рет қаралды 9,180

Programe seu futuro

Programe seu futuro

Күн бұрын

Пікірлер: 34
@fzolio
@fzolio Жыл бұрын
Tem professor melhor de C??? Não tem!!! Você é fera!!
@rdcodigos3211
@rdcodigos3211 3 күн бұрын
Muito interessante, eu não conhecia o realloc vai ser muito útil nos meus projetos que utilizo o C
@Caio_ADS
@Caio_ADS 2 жыл бұрын
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
@batler12 Жыл бұрын
Boa sorte pra você amigo
@3stud0
@3stud0 6 ай бұрын
Ótima aula, como sempre!
@andersoncoelhoac8307
@andersoncoelhoac8307 2 жыл бұрын
Parabéns pelo trabalho.
@programeseufuturo
@programeseufuturo 2 жыл бұрын
Obrigado 🙌
@rhyann3486
@rhyann3486 2 жыл бұрын
muito boa a sua didática, parabéns!
@rique0601
@rique0601 Жыл бұрын
Excelente aula!
@programeseufuturo
@programeseufuturo Жыл бұрын
Obrigado Rique😃
@hela5534
@hela5534 2 жыл бұрын
Ó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?
@programeseufuturo
@programeseufuturo 2 жыл бұрын
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.
@MDAVID2903
@MDAVID2903 3 жыл бұрын
Ó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));
@programeseufuturo
@programeseufuturo 3 жыл бұрын
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.
@MDAVID2903
@MDAVID2903 3 жыл бұрын
@@programeseufuturo Obrigado Professor.
@aquele_frank
@aquele_frank 3 жыл бұрын
Excelente conteúdo, parabéns. Tenho uma pequena dúvida. Como eu poderia "diminuir" o tamanho tamanho do vetor?
@programeseufuturo
@programeseufuturo 3 жыл бұрын
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.
@myckelrodrigues34
@myckelrodrigues34 3 жыл бұрын
Professor mestre da Língua C, me diga, ainda vai ter mais aulas? Se sim, esse play list vai ta completa com quantas aulas?
@programeseufuturo
@programeseufuturo 2 жыл бұрын
Olá Myckel. Sim, ainda terão mais aulas, mas ainda não sei exatamente quantas, ainda tive tempo de preparar as aulas de grafos.
@brunodavis7303
@brunodavis7303 2 жыл бұрын
Depois quando chamamos o realloc também temos que verificar se o ponteiro retornado é nulo ou não?
@programeseufuturo
@programeseufuturo 2 жыл бұрын
O ideal é verificar Bruno, pois como disse no outro comentário, se não for possível realocar a memória será retornado null.
@jailsonathayde74
@jailsonathayde74 2 жыл бұрын
Baita aula! Uma dúvida, se a realloc retornar erro, eu perco os 10 primeiros dados que foram gravados?
@programeseufuturo
@programeseufuturo 2 жыл бұрын
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.
@ishidamatheus1202
@ishidamatheus1202 10 ай бұрын
e como faz pra inserir elemento nos indiceis que estao com lixo de memoria ou zerados ?
@brunodavis7303
@brunodavis7303 2 жыл бұрын
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.
@programeseufuturo
@programeseufuturo 2 жыл бұрын
É 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.
@brunodavis7303
@brunodavis7303 2 жыл бұрын
@@programeseufuturo entendi. Obrigado professor!
@brunodavis7303
@brunodavis7303 2 жыл бұрын
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);" ?
@programeseufuturo
@programeseufuturo 2 жыл бұрын
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.
@antonnelly
@antonnelly 8 ай бұрын
@@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?
@edgardmacfadden2372
@edgardmacfadden2372 7 ай бұрын
@@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
@rafinha0206
@rafinha0206 2 жыл бұрын
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]); }
@programeseufuturo
@programeseufuturo 2 жыл бұрын
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á.
@antonnelly
@antonnelly 8 ай бұрын
@@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?
小丑教训坏蛋 #小丑 #天使 #shorts
00:49
好人小丑
Рет қаралды 45 МЛН
Alocacao Dinamica de Vetor Linguagem C
6:34
Eduardo Casavella
Рет қаралды 22 М.
Alocação dinâmica: introdução a malloc e calloc
13:19
Algoritmos
Рет қаралды 4,3 М.
computers suck at division (a painful discovery)
5:09
Low Level
Рет қаралды 1,7 МЛН
Pilha Alocada Dinamicamente - Linguagem C - Estruturas de Dados
18:28
Pietro Martins De Oliveira
Рет қаралды 19 М.
Programar em C - Função malloc() | Alocação Dinâmica Pt.2 - Aula 96
20:18
De aluno para aluno
Рет қаралды 129 М.
Programação em C - 14 - Alocação Dinâmica
13:16
Professor Rafael Ivo
Рет қаралды 16 М.
PONTEIROS EM C: SE NÃO APRENDER COM ESSE VÍDEO, ESQUECE!
15:13
31 nooby C++ habits you need to ditch
16:18
mCoding
Рет қаралды 837 М.
Como funcionam as LINGUAGENS de PROGRAMAÇÃO #SagaDosComputadores Ep. 8
18:04
小丑教训坏蛋 #小丑 #天使 #shorts
00:49
好人小丑
Рет қаралды 45 МЛН