2010-05-31 29 views
6

Trong một dự án C++, tôi sử dụng API gọi JNI để khởi chạy một JVM. Tôi đã thực hiện một wrapper nhỏ arount JVM vì vậy tôi có thể sử dụng tất cả các bộ phận cần thiết trong một thời trang OO. Cho đến nay hoạt động rất tốt.JNI_CreateJavaVM: Buffer overrun nếu tôi ném một ngoại lệ trong trường hợp thất bại

Bây giờ, nếu JVM không bắt đầu (JNI_CreateJavaVM trả về giá trị < 0) Tôi muốn nêu một ngoại lệ trong mã C++ của mình. Nhưng nếu tôi ném ngoại lệ sau JNI_CreateJavaVM, tôi sẽ bị tràn bộ đệm. Nếu tôi tăng ngoại lệ mà không có cuộc gọi JNI_CreateJavaVM, nó hoạt động như mong đợi.

Có ai có đầu mối về vấn đề có thể có ở đây không? Hoặc làm thế nào để gỡ lỗi này?

Môi trường: Windows, Visual Studio 2008 JDK: jrockit27.6jdk16005, nhưng xảy ra với một chứng khoán SUN cũng

Cheers Dominik

+1

Bạn đã thử jvm-> DestroyJavaVM(); trước khi ném? –

Trả lời

2

Trông với tôi như bạn đang ném một con trỏ hoặc tham chiếu đến một bộ nhớ không hợp lệ. Bạn nên ném một ngoại lệ bằng cách tham chiếu, nhưng hãy đảm bảo rằng đối tượng không nằm trên ngăn xếp. Nếu đối tượng được cấp phát bằng cách sử dụng 'mới', bạn sẽ cần phải quản lý đúng cách này (nếu không bạn sẽ bị rò rỉ). Cách tiếp cận của tôi là cố gắng và ném các vật thể const càng nhiều càng tốt.

Điều này có hữu ích không?

Các vấn đề liên quan