paulo1205
(usa Ubuntu)
Enviado em 27/01/2013 - 09:02h
paulo1205 escreveu:
Na linha em que você faz *(long *)p = func;, você assume que o tamanho de um inteiro longo é igual ao tamanho de um ponteiro genérico, e atribui o valor de um ponteiro a um lvalue cujo tipo é long. A assunção não necessariamente é sempre verdadeira, e a confusão com os tipos, que decorre certamente da assunção sobre os tamanhos, é um tipo de coisa temerária que um compilador configurado corretamente não deveria deixar passar sem pelo menos dar uma mensagem de aviso.
Não só filosoficamente, mas até em termos práticos, seria melhor você fazer da seguinte forma: *(void **)p=func;, até porque func já é do tipo void *.
E, obviamente, também as linhas
p+=sizeof(long);
len+=sizeof(long);
deveriam ser trocadas para
p+=sizeof func;
len+=sizeof func;
(sendo
p um ponteiro para caracteres).