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

Zkusil jsem napsat kompletně nový kód, problém mi dělá načítání hodnoty do cislo2 (64. řádek) - hodnoty se načtou, ale jakmile program opustí cyklus, ihned se cislo2[0] a cislo2[1] přepíšou na -8...(strašně moc čísel :D) - čím to může být? Za chvíli mi z toho asi uletí hlava :D

#include<iostream>
#include<string>

using namespace std;

int main(){
	string vstup;

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

	int mezera = 0;
	int delka1 = 0;
	int delka2 = 0;
	
	//urcim pocet mezer, osetrim vstup jinych znaku
	int i; //adresa mezery
	int adresa_posledniho_prvku = delka_vstup-1;

	for(int j = 0; j <= adresa_posledniho_prvku; ++j){
		if(vstup[j] != ' ' && vstup[j] != '1' && vstup[j] != '0'){
			cout << "Nespravny vstup." << endl;
			return 0;
		}
		if(vstup[j] == ' '){
			i = j;
			++mezera;
		}
	}

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

	//urcim delky poli
	int a; //index konce cislo1
	for(a = 0; a < i; ++a){
		++delka1;
	}
	--a;
	int b; //index konce cislo2
	for(b = i+1; b < delka_vstup; ++b){
		++delka2;
	}
	--b;

	int max_delka; //delka vetsi ze vstupnich hodnot - pouziju pro alokaci obou poli
	if(delka1 > delka2){
		max_delka = delka1;
	}else{
		max_delka = delka2;
	}

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

	//zapisu hodnoty do poli
	for(int j = 0; j <= a; ++j){
		cislo1[j] = vstup[j]-48;
	}
for(int j = i+1; j <= b; ++j)
cislo2[j - i+1] = vstup[j]-48;
}
cout << cislo2[0] << cislo2[1] << cislo2[2] << endl;

	//zbytek poli vyplnim nulami
	for(int j = a+1; j < max_delka; ++j){
		cislo1[j] = 0;
	}
	for(int j = b+1; j < max_delka; ++j){
		cislo2[j] = 0;
	}

	cout << cislo1[0] << cislo1[1] << cislo1[2] << endl;
	cout << cislo2[0] << cislo2[1] << cislo2[2] << endl;

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

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

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

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

	return 0;
}

Reakce na odpověď

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

Zpět do poradny