Um exercício para começar.
Qual o erro na função a seguir?
CelPixel* inserir(CelPixel *l, int a, int b) { CelPixel novo; novo.x = a; novo.y = b; novo.prox = l; return &novo; }
Um exercício para começar.
Qual o erro na função a seguir?
CelPixel* inserir(CelPixel *l, int a, int b) { CelPixel novo; novo.x = a; novo.y = b; novo.prox = l; return &novo; }
Talvez seja a variável 'novo', que é local, e, por mais que se retorne o endereço dela, ela vai deixar de existir ao fim da função. Uma alternativa seria declarar um ponteiro 'CelPixel *novo' e alocar a memória necessária, retornando 'novo', i.e. o endereço da célula. To viajando?
Talvez seja a variável 'novo', que é local, e, por mais que se retorne o endereço dela, ela vai deixar de existir ao fim da função.
É isso ai!
A variável automática novo será alocada na pilha de execução do nosso programa,
junto com as variáveis l, a e b e o endereço de retorno para a função
que por ventura tenha chamado a inserir.
Assim, que a função inserir terminar de ser executada ela devolverá o endereço
da variável novo e retornará do ponto que que foi chamada.
O problema é que a área ocupada por novo passa a ser considerada livre depois
do final da função e poderá ser utilizada para outros fins por funções que por
ventura sejam chamadas pelo nosso programa.