Linux C的gdb调试问题

我在使用Ubuntu的GDB调试一段C语言程序,程序如下:

#include<stdio.h>

int c[3]={0},d[3]={0},n;
int v1=0,f1=0,p1=0;
int v2=0,f2=0,p2=0;

void judge(char m,char n)
{
   if((m=='J'&&n=='B')||(m=='B'&&n=='C')||(m=='C'&&n=='J'))
   {
     v1++;
     f2++;
     if(m=='J')c[0]++;
     if(m=='B')c[1]++;
     if(m=='C')c[2]++;
   }
   else if(m==n)
   {
      p1++;p2++;
   }
   else
   {
      f1++;
      v2++;
      if(n=='J')d[0]++;
      if(n=='B')d[1]++;
      if(n=='C')d[2]++;
   }
   return;
}

void max(int a,int b,int c)
{
   if(a>b&&a>c)printf("J");
   else if(b>a&&b>c)printf("B");
   else if(c>a&&c>b)printf("C");
   else if(a==b||b>c)printf("B");
   else if(a==c||c>b)printf("C");
   else if(b==c||b>a)printf("B");
}

void find()
{
   max(c[0],c[1],c[2]);
   printf(" ");
   max(d[0],d[1],d[2]);
   printf("\n");
   return;
}

int main()
{
   scanf("%d",&n);
   getchar();
   char s1,s2;
   for(int i=0;i<n;i++)
   {
      scanf("%c %c",&s1,&s2);
      getchar();
      judge(s1,s2); 
   }

   printf("%d %d %d\n",v1,p1,f1);
   printf("%d %d %d\n",v2,p2,f2);
   find();      
   
   return 0;
}

在GDB 上调试的时候,对main函数中的两个char变量s1、s2设置观察,结果在调试的时候出现了这个问题:

但是程序本身的运行没有问题

请问哪位大佬能解释一下呢?多谢啦

频繁使用的变量会被编译器优化掉。建议到最上层看他的值。

引用什么的也可能被编译器优化掉。调试就显示 optimized.