

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;
}