5
When I compile and execute this code on Linux, it shows a strange result. I believe it is memory junk. What is happening for it to show this result, and how I can solve?
Command lines to compile code
gcc -c aluno.c
gcc -c test.c
gcc test.o aluno.o -o test.bin
Upshot
Student file. h
/* TAD: Aluno (matricula, nome, curso) */
typedef struct aluno Aluno;
/* Aloca e retorna um aluno com os dados passados por parâmetro */
Aluno *novo(int matricula, char *nome, char *curso);
/* Libera a memória de um aluno previamente criado */
void libera(Aluno *aluno);
/* Copia os valores de um aluno para as referências informadas */
void acessa(Aluno *aluno, int *matricula, char *nome, char *curso);
/* Atribui novos valores aos campos de um aluno */
void atribui(Aluno *aluno, int matricula, char *nome, char *curso);
/* Retorna o tamanho em bytes do TAD aluno */
int size();
Student file. c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct aluno{
int matricula;
char nome[50];
char curso[20];
}Aluno;
Aluno *novo(int matricula, char *nome, char *curso){
Aluno *a;
a=malloc(sizeof(Aluno));
a->matricula=matricula;
strcpy(a->nome,nome);
strcpy(a->curso,curso);
}
void libera(Aluno *aluno){
free(aluno);
}
void acessa(Aluno *aluno, int *matricula, char *nome, char *curso){
matricula=(int*)&aluno->matricula;
nome=(char*)&aluno->nome;
curso=(char*)&aluno->curso;
}
void atribui(Aluno *aluno, int matricula, char *nome, char *curso){
aluno->matricula=matricula;
strcpy(aluno->nome,nome);
strcpy(aluno->curso,curso);
}
int size(){
return (int)sizeof(Aluno);
}
File test. c
int main()
{
Aluno *a;
a=malloc(sizeof(size()));
a=novo(123,"victhor","computacao");
int *matricula;
char *nome, *curso;
acessa(a,matricula,nome,curso);
printf("Matrícula: %d\n",*matricula);
printf("Nome: %s\n", nome);
printf("Curso: %s\n", curso);
return 0;
}
Vlw man, you solved everything Aki.
– Victhor Hugo