killezio Posted July 19, 2016 at 01:33 PM Report #597714 Posted July 19, 2016 at 01:33 PM (edited) Vou colocar aqui as duas formas das quais não percebo se existe alguma diferença significante em memória ocupada e até rapidez do programa. aqui vai a primeira forma de fazer: typedef struct _exemplo1 * exemplo1; struct _exemplo1 { int *a; struct _exemplo1 *seguinte; // poderia trocar esta linha por >exemplo1 * seguinte;< ? } exemplo1 criaExemplo1(int *a,exemplo1 e){ exemplo aux = malloc(sizeof(struct _exemplo1)); aux->a = a; aux->seguinte = e; return aux; } void destroiExemplo1(exemplo1 e){ free(e->seguinte); free(e); } aqui, eu tenho a certeza que quando apago a estrutura com a função destroiExemplo1 liberto totalmente a memória ocupada previamente por ela. Passando à segunda estrutura typedef struct _exemplo2 * exemplo2; struct _exemplo2{ int a; struct _exemplo2 * seguinte; } exemplo2 criaExemplo2(int a,exemplo1 e){ exemplo2 aux = malloc(sizeof(struct _exemplo2)); //auxiliar aux->a = a; aux->seguinte = e; return aux; } void destroiExemplo1(exemplo1 e){ free(e->seguinte); free(e); } o que está a confundir nesta é ter um inteiro a em vez de um apontador (para o qual poderia fazer free e libertar a sua memória). Edited July 19, 2016 at 01:37 PM by killezio
killezio Posted July 19, 2016 at 02:56 PM Author Report #597716 Posted July 19, 2016 at 02:56 PM Na primeira posso fazer criaExemplo1(17,NULL) ? a minha dúvida está no 17
pwseo Posted July 19, 2016 at 04:50 PM Report #597718 Posted July 19, 2016 at 04:50 PM Não podes utilizar esse 17 directamente. A função criaExemplo1 pede um apontador para um inteiro, e tu estás a dar-lhe um inteiro literal. Se fizeres isso, o teu programa na realidade estará a tentar ler o número inteiro situado no endereço de memória 17.
HappyHippyHippo Posted July 19, 2016 at 05:07 PM Report #597721 Posted July 19, 2016 at 05:07 PM além disso, dás a entender que ainda tens dificuldades em usar essa forma, ao qual não recomendo sem saberes exactamente o que estás a fazer, isto porque podem ocorrer muitos mais problemas do que aparenta. como exemplo: #include <stdio.h> // o teu código int main(void) { exemplo1 exemplo; { int i = 10; exemplo = criaExemplo1(& i, NULL); } printf("o valor guardado na estrutura : %d\n", * exemplo->a); // ups !!! destroiExemplo1(exemplo); return 0; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
killezio Posted July 23, 2016 at 11:34 PM Author Report #597788 Posted July 23, 2016 at 11:34 PM (edited) Não podes utilizar esse 17 directamente. A função criaExemplo1 pede um apontador para um inteiro, e tu estás a dar-lhe um inteiro literal. Se fizeres isso, o teu programa na realidade estará a tentar ler o número inteiro situado no endereço de memória 17. ok entendi além disso, dás a entender que ainda tens dificuldades em usar essa forma, ao qual não recomendo sem saberes exactamente o que estás a fazer, isto porque podem ocorrer muitos mais problemas do que aparenta. como exemplo: #include <stdio.h> // o teu código int main(void) { exemplo1 exemplo; { int i = 10; exemplo = criaExemplo1(& i, NULL); } printf("o valor guardado na estrutura : %d\n", * exemplo->a); // ups !!! destroiExemplo1(exemplo); return 0; } tens razão ainda ando a tentar perceber isto melhor Edited July 23, 2016 at 11:35 PM by killezio
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now