C ++:正常块后检测到堆损坏

时间:2014-11-26 20:08:06

标签: c++ arrays function pointers heap-corruption

我被分配了一个任务,我应该在其中创建一些在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
    }
}

我在这里尝试做的基本上是从'c​​Dizi'获取指定数量的字符并将它们放在另一个预先创建的数组'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个小时,但无论如何都找不到。

1 个答案:

答案 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
    }
}