有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尝试运行本机库时发生java异常\u访问\u冲突?

所以我把这个native library here编译成了一个。因此,使用MinGW(64位版本,Eclipse对我大喊要运行32位版本)进行归档

我能够成功地加载它并从中调用函数,但一旦调用函数,就会出现以下错误:

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000672434fd, pid=6932, tid=5628

JRE version: Java(TM) SE Runtime Environment (7.0_67-b01) (build 1.7.0_67-b01)

Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode windows-amd64 compressed oops)

Problematic frame: C  [gifflen.so+0x34fd]

所以我不确定该怎么做。我假设是32位,64位的问题?很可能不是,但那只是我的猜测

日志文件很大,所以我不确定什么是相关的。这里有一个部分:

Stack: [0x000000000e720000,0x000000000e820000],  sp=0x000000000e81efc0,  free space=1019k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [gifflen6.so+0x34fd]
C  [gifflen6.so+0x2400]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.jiggawatt.giffle.Giffle.AddFrame([I)I+0
j  org.jiggawatt.giffle.Giffle.addFrame([I)V+2
... (etc) ...
j  com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop()V+684
j  com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run()V+27
v  ~StubRoutines::call_stub

崩溃似乎发生在本机的AddFrame()函数中?如果是这样的话,这不是第一个被调用的函数,Init()之前被调用,显然不会导致崩溃


编辑,崩溃源?:

所以我得到了printf()的工作,可以看到事件的进展

本机的Init()函数运行,没有问题

本机函数AddFrame()也会运行一段时间,直到达到以下要求:

// ...

printf("gifflen: checkpoint\n");

i = 0;
while (i < samplepixels) {
    printf("\ngifflen: in loop at %o (1)\n", i);
    /*b = p[0] << netbiasshift;
    g = p[1] << netbiasshift;
    r = p[2] << netbiasshift;*/
    b = (((*p)) & 0xff) << netbiasshift;
    g = (((*p) >> 8) & 0xff) << netbiasshift;
    r = (((*p) >> 16) & 0xff) << netbiasshift;
    j = contest(b,g,r);

    printf("gifflen: still in loop (2)\n");
    altersingle(alpha,j,b,g,r);
    if (rad) alterneigh(rad,j,b,g,r);   /* alter neighbours */
    printf("gifflen: still in loop (3)\n");
    p += step;
    if (p >= (unsigned int *)lim) p -= lengthcount;
    printf("gifflen: still in loop (4)\n");
    i++;
    if (i%delta == 0) {
        alpha -= alpha / alphadec;
        radius -= radius / radiusdec;
        rad = radius >> radiusbiasshift;
        if (rad <= 1) rad = 0;
        for (j=0; j<rad; j++)
            radpower[j] = alpha*(((rad*rad - j*j)*radbias)/(rad*rad));
    }
    printf("gifflen: still in loop (5)\n");
}

// ...

日志如下所示:

gifflen: checkpoint

gifflen: in loop at 0 (1)
gifflen: still in loop (2)
gifflen: still in loop (3)
gifflen: still in loop (4)
gifflen: still in loop (5)

// ...

gifflen: in loop at 714 (1)
gifflen: still in loop (2)
gifflen: still in loop (3)
gifflen: still in loop (4)
gifflen: still in loop (5)

gifflen: in loop at 715 (1)
gifflen: still in loop (2)
gifflen: still in loop (3)
gifflen: still in loop (4)
gifflen: still in loop (5)

gifflen: in loop at 716 (1)
*crash*

当samplepixels为230400(640 x 360 gif大小=230400像素)时,迭代在716处崩溃

不确定这是否意味着什么,但在Eclipse控制台中,“致命错误”崩溃打印首先出现,然后是我上面发布的所有日志。(它不在前面,这会更有意义。)

不明白为什么在716次迭代之后,事情会停止工作


共 (0) 个答案