1

私は JNI ライブラリを作成しましたが、Java では次のように定義されています。

public class SDLMain 
{
    static {System.loadLibrary("SDLBitsX");}

    public static native void init();
}

C では次のように定義されています。

JNIEXPORT void JNICALL Java_gd_verfolgungsja_sdlbitsx_SDLMain_init(JNIEnv * env, jclass this)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Surface *screen = SDL_SetVideoMode(512, 512, 8, 0);
    SDL_FreeSurface(screen);
    SDL_Quit();
}

Javaコードが吐き出します:

2013-03-29 22:34:01.796 java[10851:1303] _NSSetWindowTag, error clearing window tags (1000)
2013-03-29 22:34:01.797 java[10851:1303] _NSSetWindowTag, error setting window tags (1000)
2013-03-29 22:34:01.799 java[10851:1303] error [1000] getting window resolution
2013-03-29 22:34:01.799 java[10851:1303] Error [1000] setting resolution to 1
2013-03-29 22:34:01.800 java[10851:1303] error [1000] setting colorSpace to Color LCD colorspace
java(10851,0x107b58000) malloc: *** error for object 0x7fff8c03af01: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

コメントアウトすると、関数は正常に機能します

SDL_Surface *screen = SDL_SetVideoMode(512, 512, 8, 0);
SDL_FreeSurface(screen);

私はMacを使っています。なぜこれを行うのですか?

4

1 に答える 1

0

MacでSDLを使用したことはありませんが、すぐにあなたの呼び出しSDL_FreeSurface(screen)は無効です.. (IIRCは通常、デフォルトの作業面を自分で解放しません)デフォルトの描画面はによって自動的に解放されるSDL_Quit()ため、あなたの場合SQL_Quit()は解放しようとしています存在しないもの。

于 2013-03-30T14:08:31.230 に答える