2008-12-23 12 views
5

Mam tylko 1 wiersz kodu, a to:Dlaczego otrzymuję błąd przekroczenia bufora z tym wierszem kodu?

pcrecpp::RE re("abc"); 

wewnątrz funkcji OnBnClickedButtonGo(). Ta funkcja nie działa w trybie Release, ale działa poprawnie w trybie debugowania.

(używam Visual Studio 8 w systemie Windows XP).

Komunikat o błędzie jest:

A buffer overrun has occurred in testregex.exe which has corrupted the program's 
internal state. Press Break to debug the program or Continue to terminate 
the program. 
For more details please see Help topic 'How to debug Buffer Overrun Issues'. 

Podejrzewam, że jest jego destruktor, który jest niewidoczny i zrozumienia ... ale ja don Naprawdę wiem.

PS: Łączę statycznie z wersją biblioteki PCRE 7.8. PS2: Niezbyt trafne, ale może pomóc niektórym osobom, które mają problemy z łączeniem się z biblioteką PCRE (zajęło mi to trochę czasu, aby to rozwiązać): dołącz linię #define PCRE_STATIC.

+0

Czy zbudowałeś bibliotekę, czy też była to biblioteka konserwowa? Tak czy inaczej, czy został skompilowany z tym samym kompilatorem? Jeśli nie, spróbuję zbudować bibliotekę z twoim kompilatorem i zobaczę, czy to pomaga. –

Odpowiedz

0

Jeśli dzieje się to tylko w trybie zwolnienia, możliwe, że coś zostanie "zoptymalizowane". Spróbuj zrobić coś więcej niż tylko jedną linijkę, np. Match(), a może nawet wydrukować mecze.

3

Miałem ten sam komunikat o błędzie w moim przypadku. W debugowaniu wszystko jest w porządku, ale w wersji dostaję komunikat o błędzie. Mam natywną bibliotekę C/C++, taką jak native.dll. Stworzyłem mieszaną niezarządzaną/zarządzaną bibliotekę C++, która jest opakowaniem dla tej biblioteki do .net. Gdzieś w tym mixed.dll mam deklarację podpis funkcja niezarządzanej, jak:

typedef void (*FunctionOnStartSend)(); 

dla tego dostaję komunikat, ale jeśli dodać „magiczne słowo” nie to nie ma komunikatu o błędzie:

typedef void (__stdcall *FunctionOnStartSend)(); 
+0

Wspaniała odpowiedź, człowieku! – LmTinyToon

0

Oto moja świeża historia: Około miesiąc temu mam dziwną awarię łącza z VS2008 i tego dnia wykopali że ustawienie _SECURE_SCL = 0 może pomóc (patrz link text). I to pomogło. Tego dnia pomógł mi i po prostu propagowałem to ustawienie do wszystkich bibliotek, które budujemy w zespole - to dlatego, że MS twierdzi, że dwie biblioteki zbudowane z różnymi _SECURE_SCL są niepołączalne.

Czas minął i trzy dni temu Mam błąd, gdy VS2008 mówi o tym błędzie, który widzimy w pierwszym poście. I nie ma żadnej pomocy z debuggera, ponieważ przekroczono tylko w wersji Release. Spędziłem prawie 2 dni na pompowaniu i kodowaniu bibliotek, a przekroczenie było błędne od linii do linii. W końcu zacząłem sprawdzać ustawienia budowania linia po linii i wymyśliłem różnicę w tym ustawieniu!

Dlaczego, ach dlaczego Microsoft faceci nie mogą osadzać jakąś niewielką kontrolę w dynamicznym kodem ładowarka do testowania, że ​​biblioteka obecnie pracuje i jeden będzie dynamicznie ładowane są incompartible? Niektóre fragmenty kodu, które oszczędzają czas ludzi. Bla!

Powiązane problemy