我被分配了一个任务,我应该在其中创建一些在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个小时,但无论如何都找不到。
答案 0 :(得分:0)
你的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
}
}