Mensaje    Asunto: Diferentes resultados cuando ejecuto modo release y debug Responder citando

Hola.
Tengo un problema que me está dando muchos dolores de cabeza. Resulta que estoy haciendo un programita de simulación. Cuando lo compilo en modo debug y lo ejecuto funciona sin problemas, pero cuando quiero compilarlo en modo Release me empiezan a salir errores de accesos inválidos a memoria.
Como en modo Release no puedo hacer una ejecución paso a paso, mediante mensajitos de error he ido consiguiendo aislar el problema en una llamada a una función. Sin embargo (y esto es lo más gracioso de todo) poniendo un par de ShowMessage en la función para saber q línea en concreto era la q fallaba resulta q ya no da el fallo y termina su ejecución. Eso sí, al salir del programa sí me salen un par de accesos incorrectos.

Me imagino q resolver este problema es bastante complicado sin tener ninguna referencia más, así q pondré el código donde parece estar fallando:
Código:

// Esta función está dentro de una clase
// template <class T> class TCola
// con la q he implementado una cola circular.
// Esta función en concreto elimina un elemento del medio de la cola y
// desplaza el resto para dejarla con todos los elementos consecutivos
// Los campos q usa son:
// - elements: El array de objetos
// - first: El índice del primer objeto (cabeza de la cola)
// - last: El índice del primer hueco ("cola" de la cola)
// - size: Número de elementos

    T *__fastcall remove(int pos) {
        if (pos == first)
            return remove();
        if (last > first) {
            if ((pos >= last) || (pos < first))
                return NULL;
        }
        else {
            if ((pos >= last) && (pos < first))
                return NULL;
        }
        // Aquí ponía uno de los ShowMessage
        last = (last > pos) ? last : last + size;
        T *aux = elements[pos];
        for (int i = pos; i < last; i++)
            elements[i % size] = elements[(i + 1) % size];
        last = (last - 1) % size;
        // Aquí ponía otro de los ShowMessage
        return aux;
    }


Supongo q incluso así será bastante complicado, pero a ver si alguien ha tenido algún problema similar y puede ayudar.