Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C++ - Heap corruption detected

Ahoj! Tak jsem zase tady - posunul jsem se k práci s dynamickým polem a zkusil jsem to zkombinovat se sčítáním binárních čísel (btw je to i úkol do školy, ale základní verzi se statickými poli už jsem odevzdal :D ) - načtu řetězec, obě čísla načtu do polí, převedu pole na stejnou velikost, neinicializované buňky vyplním nulami a sčítám - program čísla sečte, jen mi vždy vyhodí hlášku "Heap corruption detected". Ať dělám, co dělám, nemůžu přijít na to, kde "hrabu" do paměti - poradíte?
Moc díky za odpovědi, Katsu ;-)

#include<iostream>
#include<string>
using namespace std;

int main(){
	string vstup;
	int a = 0;
	int max = 0; //pocet prvku ve vice inicializovanem poli 
	

	cout << "Zadejte dve binarni cisla:" << endl;
	getline(cin, vstup);
	int delka = vstup.length();

	//zjisteni delky retezcu
	int prep2 = 0;
	int delka1 = 0;
	int delka2 = 0;

	for(int i = delka - 1; i >= 0; --i){
		if(vstup[i] == ' '){
			++prep2;
			continue;
		}
		if(prep2 == 0){
			++delka1;
		}else if(prep2 == 1){
			++delka2;
		}
	}
	
	int delka3;
	if(delka1 < delka2){
		delka3 = delka2;
	}else{
		delka3 = delka1;
	}

	int *cislo1 = new int[delka3];
	int *cislo2 = new int[delka3];

	int j = 0;
	int k = 0;
	int mezera = 0;
	for(int i = delka - 1; i >= 0; --i){
		if(vstup[i] == ' '){
			++mezera;
			++a;
			continue;
		}
		if(vstup[i] == '1' || vstup[i] == '0'){
			if(a == 0){
				cislo1[j] = vstup[i]-48;
				++j;
			}else{
				cislo2[k] = vstup[i]-48;
				++k;
			}
		}else{
			cout << "Nespravny vstup." << endl;
			return 0;
		}
		if(j > max){
			max = j;
		}else if(k > max){
			max = k;
		}
	}

	int *soucet = new int[max+1];

	
	if(mezera != 1){
		cout << "Nespravny vstup." << endl;
		return 0;
	}

	//vyplneni zbytku poli 0-mi
	for(int i = j; i <= delka3; ++i){
		cislo1[i] = 0;
	}
	for(int i = k; i <= delka3; ++i){
		cislo2[i] = 0;
	}

	int bon = 0; //"bonus" pri scitani, prechazejici na dalsi pozici
	int b = 0;
	for(int i = 0; i <= max; ++i){
		if(cislo1[i] + cislo2[i] + bon == 0){
			soucet[b] = 0;
			bon = 0;
		}else if(cislo1[i] + cislo2[i] + bon == 1){
			soucet[b] = 1;
			bon = 0;
		}else if(cislo1[i] + cislo2[i] + bon == 2){
			soucet[b] = 0;
			bon = 1;
		}else if(cislo1[i] + cislo2[i] + bon == 3){
			soucet[b] = 1;
			bon = 1;
		}
		++b;
	}

	int zkouska = 0;
	cout << "Soucet: ";
	for(int i = max; i >= 0; --i){
		if(soucet[i] == 1){ //kontrola 1 mezery
		zkouska = 1;
		}
		if(zkouska == 1){
			cout << soucet[i];
		}
		if(i == 0 && zkouska == 0){
			cout << 0;
		}
	}
	cout << endl;

	delete [] cislo1;
	delete [] cislo2;
	delete [] soucet;

	return 0;
}

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny