Então galera, sou novato no fórum me avisem se fiz algo errado, já pesquisei sobre mas não achei exatamente minha dúvida. Então to fazendo programação na faculdade, e tenho um trabalho para fazer uma calculadora polonesa. Ainda não tenho conhecimentos sobre ponteiros e nem funções por isso não utilizei no meu programa. O mesmo compila (compilador = gcc), mas quando digito qualquer equação ele dá um Segmentation Fault, que sei que é um problema relacionado a alocação de memória mas não tenho ideia de como resolver-lo nem como achá-lo, só sei que o mesmo está dentro de um if que criei na função que está sinalizado abaixo. Gostaria da ajuda de vocês. Segue o código: #include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main (){
	int vas, num_e=1;  // vassoura, número de equações
	char equacao[160],ch1,ch2; //2n-1 + /0.
	int cont1,cont3, cont2, lim, i=0, num1, num2,final=0,num3, numr;
	char res[3];
	char eq2[80],eq3[80],ch3[2];
	printf("Calculadora Polonesa:\nEste programa só aceita números de 0 à 9 e os operadores \"+,-,*,%%,/\". \n\n");
	printf("Para inserir uma equação, digite números de 0 à 9 e\ndepois os operadores todos separados por espaços. \n\n");
	printf("Digite \"exit\" para terminar o programa.\n\n");
		for (vas=1;;vas++){                                 
			printf("Insira a %dº equação: \n",num_e);
			gets(equacao);
			lim = strlen(equacao);
			for(cont3=1;cont3<lim;cont3+=2){      //TESTE DE ESPAÇOS NA EQUAÇÃO
				if (equacao[cont3]!=' '){
					printf("Erro. Partes da equação não estão separadas por um espaço.\n");
					strcpy(equacao,"");
					printf("Insira a %dº equação novamente: \n",num_e);
					gets (equacao);
					cont3=1;
				}
			lim = strlen(equacao);
			}
			if((equacao[0]=='e') && (vas==1)){
				printf("Encerrando o programa...\n");
				break;
			}
			if((equacao[0]=='e') && (vas>1))
				break;
			for(cont3=0;cont3<lim;cont3++){    //For para imprimir a equação de entrada
				printf("%c",equacao[cont3]);
			}
				for (cont1=0; cont1<lim; cont1++){             //RESULOÇÃO DA EQUAÇÃO NESTE FOR
					lim = strlen(equacao);
					ch3[0] = equacao[cont1];
					num3 = atoi(ch3);
					if (((num3>57) || (num3<48)) && equacao[cont1]!=' ') { //O PROBLEMA ESTÁ NESSE IF...LEU UM SINAL, E PEGA OS 2 NÚMEROS ANTERIORES.
						
						ch1 = equacao[cont1-2];  		//Convertendo caracteres para inteiro
						ch2 = equacao[cont1-4];
						num1 = ch1-48;
						num2 = ch2-48;
						switch (equacao[cont1]){
	
							case '+':
								numr=num1+num2;
								break;
							case '-':
								numr=num2-num1;
								break;
							case '*':
								numr=num1*num2;
								break;
							case '/':
								numr=num2/num1;
								break;
							case '%':
								numr=num2%num1;
								break;
						}
						cont2=0;
						while(cont2<(cont1-4)){      			//Copiando a parte inicial da equação para eq2(antes do sinal)
							eq2[cont2]=equacao[cont2];
							cont2++;
						}
						cont2=(cont1+1);						//Copiando a parte final da equação(após o sinal)
						while(cont2<lim){
							eq3[i]=equacao[cont2];
							i++;
						}
						res[0]=numr+48;
						strcat(eq2,res);           //Concatenando a parte inicial da equação mais o resultado da operação realizada
						strcat(eq2,eq3);	       //Concatenando parte inicial + resultado + parte final
						strcpy(equacao,"");		   
						strcpy(equacao,eq2);		//Copiando nova equação concatenada para a principal
						
						strcpy(eq2,"");				// Zerando strings
						strcpy(eq3,"");
						cont1=0;
						i=0;						//zerando tudo para para repetir o for
						}
				}
			printf("   =  %c\n",equacao[0]);
			final += atoi(equacao);   //SOMANDO AO RESULTADO FINAL
			num_e++;
		}
		if ((vas>1) && (equacao[0]=='e'))
			printf("O resultado final é: %d\n",final);
}========================================================= AVISO: Favor postar as suas duvidas no Forum Principal ( C, C++ )