Kalkulator z dynamicznym tworzeniem obiektów

0

Witam.
Mam napisać prosty kalkulator używając klas. Gdy wykona się działanie, program ma pytać czy wykonać kolejne działanie. Jeżeli tak, ma być tworzony kolejny obiekt i wszystko ma lecieć od nowa.
Mój problem polega na tym, że podczas wykonywania działania w drugim obiekcie (dokładnie podczas podawania znaku działania) debugger wyrzuca błąd i nic nie da się zrobić.

Błąd:

First-chance exception at 0x00f6159b in Kalkulator.exe: 0xC0000005: Access violation writing location 0x00000000.
Unhandled exception at 0x00f6159b in Kalkulator.exe: 0xC0000005: Access violation writing location 0x00000000.

Kod programu:

#include <iostream>
#include <string>
#include <conio.h>

using namespace std;
char CMD;
int tab;

class kalkulator{
public:
	int a;
	int c;
	int d;
	string b;


	int glowna(){

			cout << "Podaj pierwsza liczbe: ";
			cin >> a;
			cout << "\nPodaj znak dzialania: ";
			cin >> b;
			cout << "\nPodaj druga liczbe: ";
			cin >> c;
			
				if (b == "+"){
					dodawanie();
				}
				else if (b == "-"){
					odejmowanie();
				}
				else if (b == "*"){
					mnozenie();
				}
				else if (b == "/"){
					dzielenie();
				}
				else {
					cout << "\n--NIE MA TAKIEGO DZIALANIA--";
				}

	return false;
	}

private:
	int dodawanie(){
		d=a+c;
		cout << "\nWynik: " << d;
		return false;
	}
	int odejmowanie(){
		d=a-c;
		cout << "\nWynik: " << d;
		return false;
	}
	int mnozenie(){
		d=a*c;
		cout << "\nWynik: " << d;
		return false;

	}
	int dzielenie(){
		if (c == 0){
			cout << "Nie dzielimy przez 0!";
		}
		else {
			d=a/c;
			cout << "\nWynik: " << d;
		}
		return false;
	}
};
int petla(){
	cout << "\n\n-=Czy chcesz wykonac jeszcze jedno dzialanie? (T/N)=-";
	poczatek:
	CMD = getch();
	switch(CMD){
	case 'T':{
		system("cls");
		tab++;
		kalkulator* kalkul=(kalkulator*)malloc(sizeof(kalkulator)*tab);
		kalkul[tab].glowna();
		petla();}
	break;
	case 't':{
		system("cls");
		tab++;
		kalkulator* kalkul=(kalkulator*)malloc(sizeof(kalkulator)*tab);
		kalkul[tab].glowna();
		petla();}
		
	break;
	case 'n':
		exit(0);
	break;
	case 'N':
		exit(0);
	break;
	default:
		goto poczatek;
	break;
	}
}
void main(){
	kalkulator kalku;
	kalku.glowna();
	petla();
}

Proszę o pomoc.

0

kalkulator* kalkul=(kalkulator*)malloc(sizeof(kalkulator)*tab);

kalkulator* kalkul = new kalkulator[tab];

1 użytkowników online, w tym zalogowanych: 0, gości: 1