2014-11-26 15 views
0

char 배열에서 몇 가지 트릭을 수행하는 몇 가지 기능을 작성해야하는 작업이 할당되었습니다. 그래서 그 함수를 만들었고이 "HEAP CORRUCPTION DETECTED"오류로 인해 제대로 작동하는지 확인하려고했습니다. 여기 C++ : 정상적인 블록 후에 힙 손상이 감지되었습니다.

내 함수의 코드

basicly 'cDizi'의 문자의 지정된 금액을 받고 다른 미리 제작 배열 'cDondur'에 넣어 무엇 내가 여기서 뭘하려고하고
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'는 프로그램의 관련 부분에서 만들어진 배열입니다. 배열 '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 시간 동안 똑같은 작업을 해왔으나 어쨌든 그렇게 할 수는 없습니다.

+7

우리는 터키어 (또는 무엇이든)를 말하지 않기 때문에, 우리는 '카기르'와 같은 기능을 추측 할 수 없습니다. 예 :의 정의 게시 '카기르 '도. 'Dizi'는 수정 될 수 있습니다. – Columbo

+0

죄송합니다. 나는 그 부분을 추가했다고 생각했는데 즉시 추가 할 것입니다. – LoLeRji

+0

'Dizi' 배열에 대해'delete' 대신에'delete []'를 사용하는 문제가 있을까요? –

답변

0

for 루프가 잘못되었습니다. baslangic이 baslangic + karSayisi보다 작을 때 나가고 있습니다. 그렇다면 baslangic을 자극합니다. 이것은 issu 그 casuing 수 있습니다.

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 
    } 
} 
+0

도움 주셔서 대단히 감사합니다, 그것은 내 문제를 해결했습니다. – LoLeRji

+3

영어로 답변을 번역하는 것이 향후 사용자에게 유용 할 수 있습니다. –

+0

나는 그것에 대해 연구 할 것이다. – LoLeRji