Algorytm Boyera-Moore'a LOSOWY BŁĄD

Algorytm Boyera-Moore'a LOSOWY BŁĄD
LT
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 9 lat
  • Postów:5
0

Wiem, że poniższy kod wygląda okropnie. Stało się tak, bo zmieniałem go z 1000 razy przez pojawianie się za losowym podejściem poniższego błędu. W każdym razie, Ideone przepuszcza mi kod bez zarzutów i wypisuje zawsze co należy, a poniżej zamieszczam kod i screeny, z tego co mi się dzieje przy dwóch podejściach z identycznymi parametrami.

Jestem już na tyle zmęczony, że nie jestem w stanie ogarnąć dlaczego tak się dzieje. Początkowo myślałem, że to za sprawą mojego małego przekonfigurowania Eclipse, ale teraz po buildzie w CodeBlocks jest dokładnie to samo. Help -_-

Kopiuj
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <stdio.h>

using namespace std;

int textArray[] = {2,3,8,2,5,3,6,8,3,2,9,1,1,6,3,2,7,1,1,1,3,7,2,8,0,8,8};

void BoyerMoore(int* patternArray);

int main()
{
	int *patternArray = new int[2];

	cout << "Input pattern you want find in text:\n";
	cin >> patternArray[0] >> patternArray[1] >> patternArray[2];
    cout << endl << endl;
	BoyerMoore(patternArray);

	cout << endl << endl;
	delete [] patternArray;

	system("pause");
	return 0;
}
//-------------------------------------------------------------------
void BoyerMoore(int* patternArray)
{
    int textLength = sizeof(textArray)/sizeof(int),
        patternLength = 3,
        patternIndex = -1;

	for(int i = 0; i < textLength; i++)
		cout << setw(2) << textArray[i];
	cout << endl << endl;

    if(textLength < patternLength)
        cout << "Pattern is longer than text.";
    else
    {
        for(int i = patternLength - 1; i < textLength; i++)
        {
            if(patternIndex == -1)
                if(patternArray[patternLength-1] == textArray[i])
                    for(int j = i, k = 2; k >= 0; j--, k--)
                    {
                        patternIndex = j;
                        if(patternArray[k] != textArray[j])
                        {
                            patternIndex = -1;
                            break;
                        }
                    }
        }
    }

    if(patternIndex >= 0)
        cout << "Pattern begin's in text[" << patternIndex << "]";
    else
        cout << "Pattern not found.";
}

56278ab9a6.png

75e592dae3.png

twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
1
Kopiuj
int *patternArray = new int[2];

      >> patternArray[2];

mażesz po nieswojej pamięci, nie ma czegoś takiego jak patternArray[2]

LT
Zmęczenie robi swoje, dzięki! :) Ciekawi mnie tylko, dlaczego tak często to przechodziło?
twonek
może miałeś pecha i tamta komórka pamięci była nieużywana

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.