【问题标题】:C++: Heap corruption detected after normal blockC++:正常块后检测到堆损坏
【发布时间】:2014-11-26 20:08:05
【问题描述】:

我被分配了一项任务,我应该在其中创建一些对 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 个小时的代码来修复它,但无论如何都找不到。

【问题讨论】:

  • 由于我们不会说土耳其语(或其他),我们无法猜测像 cagir 这样的函数有什么作用。发布例如的定义cagir 也是。 Dizi 可能会被修改。
  • 对不起,我以为我也添加了那部分,我会立即添加它
  • 对于Dizi 数组,是否只需要使用delete[] 而不是delete?
  • 试过 delete[] 而不是 delete,它给了我同样的错误

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


【解决方案1】:

你的 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
    }
}

【讨论】:

  • 非常感谢您的帮助,它解决了我的问题。
  • 将您的答案翻译成英语可能对未来的用户有用。
猜你喜欢
  • 2013-10-12
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多