Problemas comuns durante a criação de uma compilação de versão
Durante o desenvolvimento, você geralmente criará e testará com um build de depuração do seu projeto. Se você criar seu aplicativo para um build de versão, poderá obter uma violação de acesso.
A lista abaixo mostra as principais diferenças entre uma depuração e um build de versão (nondebug). Há outras diferenças, mas a seguir estão as principais diferenças que fariam com que um aplicativo falhasse em um build de versão quando ele funcionasse em um build de depuração.
Consulte a opção do compilador /GZ (Capturar erros de Release-Build na compilação de depuração) para obter informações sobre como capturar erros de build de versão em builds de depuração.
Layout do heap
O layout do heap será a causa de cerca de noventa por cento dos problemas aparentes quando um aplicativo funcionar na depuração, mas não na versão.
Ao criar seu projeto para depuração, você usará o alocador de memória de depuração. Isso significa que todas as alocações de memória têm bytes de proteção colocados ao redor. Esses bytes de proteção detectam uma substituição de memória. Como o layout de heap é diferente entre versão e depuração, uma substituição de memória pode não criar problemas em um build de depuração, mas pode ter efeitos catastróficos em um build de versão.
Para obter mais informações, consulte Verificar se há substituição de memória e Use o build de depuração para verificar se há substituição de memória.
Compilação
Muitas das macros MFC e grande parte da implementação do MFC são alteradas quando você compilar para versão. Em particular, a macro ASSERT não é avaliada em uma compilação de versão, portanto, nenhum código encontrado em ASSERTs será executado. Para obter mais informações, consulte Examinar instruções ASSERT.
Algumas funções são embutidas para aumentar a velocidade na compilação de versão. As otimizações geralmente são ativadas em uma compilação de versão. Um alocador de memória diferente também será usado.
Suporte ao ponteiro
A falta de informações de depuração remove o preenchimento do aplicativo. Em uma compilação de versão, ponteiros perdidos têm maior chance de apontar para memória não inicializada em vez de apontar para informações de depuração.
Otimizações
Dependendo da natureza de determinados segmentos de código, o compilador de otimização pode gerar um código inesperado. Essa é a causa menos provável de problemas de compilação de versão, mas ela surge em algumas ocasiões. Para obter uma solução, consulte Otimizando seu código.