2008-12-23 8 views
5

tôi chỉ có 1 dòng mã, và đây là:Tại sao tôi nhận được lỗi tràn bộ đệm với dòng mã này?

pcrecpp::RE re("abc"); 

bên trong một hàm OnBnClickedButtonGo(). Và chức năng này thất bại trong chế độ phát hành, nhưng nó hoạt động OK trong chế độ gỡ lỗi.

(Tôi đang sử dụng Visual Studio 8 trên Windows XP.)

Các thông báo lỗi là:

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'. 

tôi nghi ngờ nó là destructor của nó, đó là vô hình và ngụ ý ... nhưng tôi don 't biết thực sự.

PS: Tôi liên kết tĩnh với phiên bản lib PCRE 7.8. PS2: Không liên quan lắm, nhưng có thể giúp một số người gặp khó khăn khi liên kết với thư viện PCRE (tôi mất nhiều giờ để sắp xếp nó): bao gồm dòng #define PCRE_STATIC.

+0

Bạn đã xây dựng thư viện hay đó là thư viện đóng hộp? Dù bằng cách nào, nó được biên dịch với cùng một trình biên dịch? Nếu không, tôi sẽ thử xây dựng các lib với trình biên dịch của bạn và xem nếu điều đó giúp. –

Trả lời

0

Nếu nó chỉ xảy ra ở chế độ phát hành, có thể có điều gì đó đang được "tối ưu hóa". Hãy thử làm một cái gì đó nhiều hơn chỉ là một lót, giống như một trận đấu() và thậm chí có thể in ra các trận đấu.

3

Tôi có cùng thông báo lỗi trong trường hợp của mình. Trong gỡ lỗi là tất cả mọi thứ tốt, nhưng trong bản phát hành tôi nhận được thông báo lỗi. Tôi có một thư viện C/C++ bản địa như native.dll. Tôi đã tạo một thư viện C++ không được quản lý/quản lý hỗn hợp, đó là một trình bao bọc cho thư viện đó tới .net. Một nơi nào đó trong mixed.dll này tôi có một khai báo hàm chữ ký không được quản lý, như:

typedef void (*FunctionOnStartSend)(); 

cho điều này, tôi nhận được thông báo, nhưng nếu tôi thêm một "câu thần chú" có thì không có thông báo lỗi:

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

Câu trả lời tuyệt vời, người đàn ông! – LmTinyToon

0

Đây là lịch sử mới của tôi: Khoảng một tháng trước, tôi đã gặp lỗi liên kết lạ của VS2008 và ngày đó tôi đào thiết lập _SECURE_SCL = 0 có thể giúp (xem link text). Và nó đã giúp. Ngày hôm đó nó đã giúp tôi và tôi chỉ truyền bá thiết lập này cho tất cả các libs mà chúng ta xây dựng ở nhóm - đó là bởi vì MS nói rằng hai libs được xây dựng với _SECURE_SCL khác nhau không thể tách rời.

Thời gian trôi qua và ba ngày trước, tôi đã gặp lỗi khi VS2008 thông báo lỗi mà chúng tôi thấy trong bài đăng đầu tiên. Và không có sự trợ giúp nào từ trình gỡ lỗi vì nó chỉ chạy trong bản phát hành Bản phát hành. Tôi đã dành gần 2 ngày pump'n'jump'n mã của libs và overrun là thiếu sót từ dòng đến dòng. Cuối cùng tôi bắt đầu kiểm tra các thiết lập xây dựng theo từng dòng và tìm ra điểm khác biệt trong cài đặt này!

Tại sao, oh tại sao Microsoft không thể nhúng một số kiểm tra nhỏ vào mã trình tải động để kiểm tra xem thư viện hiện đang chạy và một thư sẽ được nạp động là không thể phân chia?! Một số mã số tiết kiệm thời gian của mọi người. Blah!