Hola aguml.
Al primer vistazo, lo primero que llamó mi atención es:
Código:
...
unsigned long sizefilelic;
unsigned long retval = 0;
if (cadena) {
caracter = *cadena;
sizefilelic = 0;
if (caracter) {
do {
if (caracter == 0x1A)
break;
caracter = *reinterpret_cast<signed char*>(sizefilelic + cadena + 1);
...
El caso es, que
sizefilelic no es inicializado, por lo que tiene un valor indeterminado cuando se usa por primera vez.
Saludos