私は、char配列に対していくつかのトリックを実行するいくつかの関数を作成する必要があるタスクを割り当てられています。そこで、これらの関数を作成し、この「HEAP CORRUCPTION DETECTED」エラーでスタックしたときに、それらが正しく機能しているかどうかを確認しようとしました。
これが私の関数のコードです
void cagir(char cDizi[], short int baslangic, short int karSayisi, char cDondur[])
{
//Yerel Değişken
short int index = 0;
/*Diziyi baslangic değerinden başlayarak, NULL karakterine ulaşılmadığı ve baslangic değeri
baslangic + karSayisi'na eşit ya da küçük olduğu sürece oku */
for (; cDizi[baslangic] != '\0' && baslangic < baslangic + karSayisi; baslangic++)
{
//Okunan karakteri cDöndür dizisine yerleştir
cDondur[index] = cDizi[baslangic];
index += 1; //cDöndür dizisinin index'ini 1 artır
}
}
ここで私がやろうとしているのは、基本的に「cDizi」から指定された量の文字を取得し、それらを他の事前に作成された配列「cDondur」に配置することです。配列「cDizi」はユーザー入力の配列であり、「cDondur」はプログラムの関連部分で作成された配列です。呼び出される文字数を配列「cDondur」の範囲として割り当てたいと思いました。
これが私のプログラムで関数を呼び出し、「cDondur」配列を作成する部分です。
case '3': //MOD - 3
{
short int indis, karSayisi;
//Çağrılacak parçanın ilk karakterinin indisini öğren
cout << "Almak istediğiniz ilk karakterin indisi : ";
cin >> indis;
//kaç karakterlik parça çağrılacağını öğren
cout << indis << " indisli karakterden itibaren almak istediğiniz karakter sayısı : ";
cin >> karSayisi;
//Sınırı karSayisi olan bir dizi oluştur
char *Dizi = new char[karSayisi];
//Parça çağırma fonksiyonunu çağır
cagir(cDizi, indis, karSayisi, Dizi);
cout << endl;
cout << "İstediğiniz karakterler çağrıldı : ";
//cagir fonksiyonunun sonucu olan 'Dizi' dizisini ekrana yaz
for (int i = 0; i < karSayisi; i++)
cout << Dizi[i];
delete Dizi;
break;
}
ここでのkarSayisiは、配列から取得する文字数であり、elemanSayisi(ARRAY)は、そのパラメーターの文字数を返す関数です。
私は本当にこれをすばやく修正する方法を見つける必要があり、修正するために3時間ほどコードに取り組んできましたが、とにかく修正する方法を見つけることができませんでした。
forループが間違っています。baslangicがbaslangic + karSayisiよりも小さいときに終了します。次に、baslangicをインクリメントします。これはその問題を引き起こしている可能性があります。
void cagir(char cDizi[], short int baslangic, short int karSayisi, char cDondur[])
{
//Local Variable
short int index = 0;
/*Get all characters of the array till it reacher the NULL character and while it is between
values baslangic and baslangic + karSayisi*/
int exit = baslangic + karSayisi;
for (; cDizi[baslangic] != '\0' && baslangic < exit; baslangic++)
{
//place the characters to cDondur array and returnn cDöndür
cDondur[index] = cDizi[baslangic];
index += 1; //increment index of cDondur by 1
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加