Como deletar uma Struct Inteira? [RESOLVIDO]

1. Como deletar uma Struct Inteira? [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 20/04/2019 - 15:17h

Minha dúvida é básica acredito, mas não achei nada na Internet que sequer fale sobre isso! Bem estranho!
Meu Objetivo é apagar todos os registros de uma Struct! SEM TER que apagar 1 a 1 usando Loops.
Eu quero saber se existe algum comando que faça isso!
Imaginem a Struct abaixo, ela tem 10 Nomes+Telefones cadastrados.
struct {
char Nome[10];
char Tel[10];
} Cadastro[10];

// COMANDOS que tentei usar para apagar ela inteira!
Cadastro[10] = {0}; // Isso não apagou NADA
delete Cadastro; // Isso não apagou NADA
Cadastro[10].Clear(); // Não aceita compilar, mas vi dizendo que isso funcionaria pela internet

A única forma que SEI fazer é usando um Loop para editar 1 registro por vez! Mas parece feio fazer isso e nada prático!

Paulo desculpa a demora em marcar o Tópico como resolvido, mas somente HOJE consegui compreender o funcionamento disso, por isso ficou pendente eu estava estudando isso! Agora entendo perfeitamente esse comando!


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/04/2019 - 07:52h

Parece que o que você quer é zerar o conteúdo, não apagá-lo.

Se for isso, usando a sua declaração de Cadastro, o que você tem de fazer é simplesmente o seguinte.
memset(&Cadastro, 0, sizeof Cadastro); 



... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)

3. free()

O
Valo1s

(usa Red Hat)

Enviado em 20/04/2019 - 22:35h

Tenta usar :

free(cadastro)

Todo vetor tem um ponteiro que indica o primeiro endereço de memoria, e para percorrer o vetor ele vai incrementando o valor do byte do tipo de variavel que voce esta usando.
O comando free limpa esse endereco de memoria, limpando a primeira posicao, portanto eh como se o vetor nao fosse mais localizado.
Nao tenho certeza se o free realmente limpa so o ponteiro para esta primeira posicao, ou se todo o vetor.
Caso seja uma aplicacao que possa vir a consumir muita memoria, esta eh uma pratica ruim, pois todo o vetor ainda vai estar alocado em memoria, alocando recursos desnecessariamente.
Acredito que o correto seria ir dando free para liberar a memoria decrementando o valor, algo parecido com isso :

for(i=tam_do_vetor;i<=0;i--)
free(cadastro[i]);



4. Re: Como deletar uma Struct Inteira? [RESOLVIDO]

O
Valo1s

(usa Red Hat)

Enviado em 20/04/2019 - 22:38h

Soh complementando, esse tipo de questao eh muito abordado com listas encadeadas.
E como falei, quando vamos limpar uma lista, a boa pratica eh ir liberando cada elemento dela (para nao ficar alocado em memoria) e so no final, remover o ponteiro que indica seu inicio.


5. Re: Como deletar uma Struct Inteira? [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/04/2019 - 12:08h


Valo1s escreveu:

Tenta usar :

free(cadastro)

Todo vetor tem um ponteiro que indica o primeiro endereço de memoria,


Errado. Vetores não têm ponteiros associados, mas, dependendo do contexto, os vetores podem ser convertidos em ponteiros, o que é bem diferente.

O comando free limpa esse endereco de memoria, limpando a primeira posicao, portanto eh como se o vetor nao fosse mais localizado.


Errado novamente. free() não é um comando, mas sim uma função. Ela não “limpa endereço” nenhum, até porque recebe apenas uma cópia do endereço. Também não altera o conteúdo do endereço recebido, mas simplesmente recoloca no mapa (ou lista, ou tabela) de endereços livres a região de memória indicada pelo parâmetro. Para tanto, porém, essa região de memória tem de ter sido obtida por meio de alocação dinâmica (via malloc(), realloc() ou calloc()), e esse não é o caso de vetores declarados como tais no programa.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts