Felipe,
O código parece estar correto. A único diferença que vejo é na hora de testar o valor de sinal, onde você compara com ” + “, ” – “, ” x ” e ” / “. Existe um espaço na frente e atrás do sinal, onde deveria ser apenas “+”, “-“, “x” e “/”, sem espaço. Pelo menos foi assim na implementação que usamos no post. Mas inicialmente não vejo como isso poderia causar o crash. Qual é a mensagem de erro que o debugger mostra quando o programa fecha?