Problemas comuns ao criar uma versão de compilação
Durante o desenvolvimento, você normalmente criar e testar com uma compilação de depuração do seu projeto. Se você desenvolve seu aplicativo para uma versão de compilação, você pode obter uma violação de acesso.
A lista abaixo mostra as principais diferenças entre uma depuração e uma compilação de versão (nondebug). Existem outras diferenças, mas a seguir estão as principais diferenças que possam causar um falha do aplicativo em uma versão de compilação quando ele funciona em uma compilação de depuração.
Layout de heap
Compilação
Suporte de ponteiro
Otimizações
Consulte o /GZ (Catch Release-erros de compilação a compilação de depuração) opção de compilador para obter informações sobre como detectar a versão Construir erros em compilações de depuração.
Layout de heap
Layout do heap será a causa de noventa por cento dos problemas aparentes quando um aplicativo funciona na depuração, mas não a versão.
Quando você compila seu projeto para depuração, você está usando o alocador de memória de depuração. Isso significa que todas as alocações de memória tem bytes protetor, colocados em torno delas. Esses bytes de protetor de detectam uma substituição de memória. Porque o layout da pilha é diferente entre a liberação e depuração versões, uma substituição de memória não pode criar problemas em uma compilação de depuração, mas pode ter efeitos catastróficos em uma compilação de lançamento.
Para obter mais informações, consulte Verificar a sobregravação de memória e usar o Debug Build para verificar sobregravação de memória.
Compilação
Muitas das macros MFC e muito as alterações de implementação do MFC quando você cria para o lançamento. Em particular, a macro ASSERT avalia nada em uma versão de compilação, portanto, nenhum código de encontrado na ASSERTs será executado. Para obter mais informações, consulte Examinar ASSERT Statements.
Algumas funções são embutidas para maior velocidade na compilação de lançamento. Otimizações geralmente são ativadas na versão de compilação. Um alocador de memória diferentes também está sendo usado.
Suporte de ponteiro
A falta de informações de depuração remove o preenchimento do seu aplicativo. Na versão de compilação, ponteiros isolados tem uma chance maior de apontar para a 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 código inesperado. Este é a menos provável causa de problemas de compilação de versão, mas ele surgir na ocasião. Para uma solução, consulte Otimizar seu código.