EXC_I386_GPFLT certamente se refere a "Falha de proteção geral", que é a maneira do x86 dizer que "você fez algo que não tem permissão para fazer". Normalmente NÃO significa que você acessou fora dos limites de memória, mas pode ser que seu código esteja saindo dos limites e fazendo com que códigos / dados inválidos sejam usados de uma maneira que crie uma violação de proteção de algum tipo.
Infelizmente, pode ser difícil descobrir exatamente qual é o problema sem mais contexto. Existem 27 causas diferentes listadas no meu Manual do Programador AMD64, Vol 2 de 2005 - por todas as contas, é provável que 8 anos depois teria adicionado alguns Mais.
Se for um sistema de 64 bits, um cenário plausível é que seu código esteja usando um "ponteiro não canônico" - o que significa que um endereço de 64 bits é formado de forma que os 16 bits superiores do endereço não sejam todas as cópias do topo dos 48 bits inferiores (em outras palavras, os 16 bits principais de um endereço devem ser todos 0 ou 1, com base no bit logo abaixo de 16 bits). Essa regra existe para garantir que a arquitetura possa "expandir com segurança o número de bits válidos no intervalo de endereços". Isso indicaria que o código está sobrescrevendo alguns dados de ponteiro por outras coisas ou saindo dos limites ao ler algum valor de ponteiro.
Outra causa provável é o acesso desalinhado com um registro SSE - em outras palavras, a leitura de um registro SSE de 16 bytes de um endereço que não está alinhado com 16 bytes.
Existem, como eu disse, muitos outros motivos possíveis, mas a maioria deles envolve coisas que o código "normal" não faria em um sistema operacional de 32 ou 64 bits (como carregar registradores de segmento com índice de seletor inválido ou gravar em MSR (registros específicos do modelo)).