Descobrir vencedor Jogo Galo / Jogo Velha

Estou a desenvolver o jogo do galo / jogo da velha e nesse jogo tenho que verificar a cada nova jogada ou iteração se existe algum vencedor. Comecei por tentar fazer isto para uma matriz estática predefinida por mim e comecei também por fazer a verificação primeiramente excluindo das duas diagonais possíveis. O código é o seguinte

inserir a descrição da imagem aqui

int main() { int VEC[3][3] = {                 {1,0,1},                 {0,1,0},                 {1,1,1}               }; int m = 3; int n = 3; int i = 0,j = 0,count = 0;  for(i = 0; i < 3; i++) {     for(j = 0; j < 3; j++)     {         if(VEC[i][j] == VEC[i][j+1])         {             count++;         }     } } if(count == 2) {     printf("GANHOU!"); } else     printf("SEM VENCEDOR"); } 

Neste caso que apresentei ele diz-me que existe um vencedor e realmente está ali uma chave vencedora na última linha da matriz. Mas eu tenho algumas dúvidas em relação a este código. Primeiramente porque eu penso que em todas as linhas eu saiu fora da matriz por estar a verificar a posição j + 1. E não sei até que ponto isso é bastante errado ou não. Depois tentei controlar essa situação adicionando i <= 3 e j <= 3 mas eu necessito sempre de verificar se a posição seguinte á que estou é igual para aumentar a contagem de valores iguais para saber se encontrei 3 valores que dão a chave vencedora. Mas qualquer outra alteração que faça para tentar colocar o ciclo o mais correto possível, já não me indica a presença de uma chave vencedora, mesmo que ela exista. A única solução que me dá a chave vencedora é esta, mas não sei se é a correta. Alguém pode ajudar?