Hi, I am programming something to change from infix to postfix notation, However I get a general protection exception when i try to call the function that checs if the notation is correct.
I don´t even know what a general protection exception is, can someone tell me please what is it, and also, can someone help me to get rid of it, i´ll place the first part of the code:


Code:
void cambio(int,int);    //esta funcion cambia entre las bases
char *pedir_infija();    //esta funcion pide la expresion de forma infija
char *posfija(char*);   //esta funcion cambia la expresion a postfija
int comprobar(char*);   //comprueba que la expresi¢n se haya dado de manera correcta
int eval(char *);        //Da el resultado de la postfija
int convnum(char);       //Convierte el caracter a su numero equivalente

void main(){
	clrscr();
	int comp=0,resul=0,op=0,z=1,yapos=0,yain=0,sicon=0,base=10;
	char *expre, *postex;
	while(op!=4){
		op=0;
		while(op>z||op<1){
			z=1;
			printf("\n\n---------Convertidor de expresiones---------\n");
			printf("\n%d. Aceptar infija",z++);
			if(yain==1){
				printf("\n%d. Convertir a postfija",z++);
			}
			if (yapos==1){
				if(resul==-60){
					printf("\nOperacion invalida division entre cero");
				}else{
					printf("\n%d. Evaluar postfija",z++);
				}
			}
			printf("\n%d. Salir\n\n Opcion: ",z);
			scanf("%d",&op);
			getchar();
		}
		if(op==z)op=4;
		switch(op){
			case 1:
				comp=0;
				while(comp==0){   //mientras no sea valida la expresion la pedirI am silly de nuevo
					printf("\nDame la expresion infija: ");
					scanf("%s",&expre);
					getchar();
					comp=comprobar(expre);      /* general protectio exception is here*/
				}
				//printf("\nLa expresi¢n infija es: %s",expre);
				yain=1;
				yapos=0;
				break;
			case 2:
				postex=posfija(expre);   //llamada a la conversion a postfija
				printf("Postfija: ");
				printf("%s",postex);
				resul=eval(postex);
				yapos=1;
				break;
			case 3:
				//calcula el resultado
				printf("Resultado: %d",resul);
				sicon=0;
				while(sicon!=2){
					sicon=0;
					while(sicon>2||sicon<1){
						printf("\nConvertir? (1.Si,2.No): ");
						scanf("%d",&sicon);
						getchar();
					}
					if(sicon!=2){
						printf("\nEscribe la base: ");
						scanf("%d",&base);
						cambio(resul,base);
					}
				}
				break;
		}
	}
}





int comprobar(char *expre){      /*here is where the function begins*/


	int x,y=1,abr=0,cer=0;
	for(x=0;x<strlen(expre);x++){   //va comprobando cada caracter
		//comprueba de la lista de posibles caracteres que no haya ninguno
		if(expre[x]!='+'&&expre[x]!='-'&&expre[x]!='*'&&expre[x]!='/'&&expre[x]!='%'&&expre[x]!='('&&expre[x]!=')'&&!isdigit(expre[x])) y=0;
		if(expre[x]=='+'||expre[x]=='-'||expre[x]=='%'||expre[x]=='/'||expre[x]=='*'){     //En caso de que sea operador
			if((!isdigit(expre[x-1])&&expre[x-1]!=')')||x==0){      //si el anterior a l operador no es un digito
				y=0;
			}
		}
		if(expre[x]=='('){     //cuenta parentesis abiertos
			abr++;
		}
		if(expre[x]==')'){     //cuenta parentesis cerrados
			cer++;
		}
		if(expre[x]==')'){     //verifica que cuando cierre parentesis lo anterior sea digito
			if(!isdigit(expre[x-1])&&expre[x-1]!=')') y=0;
		}
	}
	if(abr!=cer) y=0;  //si no son la misma cantidad de parentesis abiertos que cerrados
	if(!isdigit(expre[strlen(expre)-1])&&expre[strlen(expre)-1]!=')') y=0;   //si el ultimo caracter es invalido
	if(y==0) printf("Expresion Invalida\n\n");
	return y;
}

}

I wont´paste the rest of the code, since it is very long as you can see

thank you