Error when setting a StructObject

51 views
Skip to first unread message

Volkan

unread,
Feb 3, 2016, 11:50:26 AM2/3/16
to NativeLibs4Java
Hi,

I tried to read an object from a pointer then set another pointer but I got the following error.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Cannot access to memory data of length 16 at offset 0 : valid memory start is 139964675668992, valid memory size is 8
at org.bridj.Pointer.invalidPeer(Pointer.java:1423)
at org.bridj.Pointer.getCheckedPeer(Pointer.java:1432)
at org.bridj.Pointer.copyBytesAtOffsetTo(Pointer.java:5029)
at org.bridj.Pointer.copyTo(Pointer.java:5109)
at org.bridj.Pointer.copyTo(Pointer.java:5101)
at org.bridj.CommonPointerIOs$NativeObjectPointerIO.set(CommonPointerIOs.java:80)
at org.bridj.CommonPointerIOs$NativeObjectPointerIO.set(CommonPointerIOs.java:41)
at org.bridj.Pointer.set(Pointer.java:2110)
at org.bridj.Pointer.set(Pointer.java:2069)
at OCLTest.main(OCLTest.java:57)

Is this a bug or am I doing something wrong?

Here is my test file:
public class OCLTest {

    public static class Point2D extends StructObject {
        public Point2D() {}
        public Point2D(Pointer pointer) {super(pointer);}
        @org.bridj.ann.Field(0)
        public int x() {
            return io.getIntField(this, 0);
        }
        @org.bridj.ann.Field(0)
        public Point2D x(int x) {
            io.setIntField(this, 0, x);
            return this;
        }
        @org.bridj.ann.Field(1)
        public int y() {
            return io.getIntField(this, 1);
        }
        @org.bridj.ann.Field(1)
        public Point2D y(int y) {
            io.setIntField(this, 1, y);
            return this;
        }
    }

    public static void main(String[] args) {
        CLContext ctx = JavaCL.createBestContext();
        CLQueue q = ctx.createDefaultQueue();
        Point2D p1 = new Point2D().x(1).y(2);
        Point2D p2 = new Point2D().x(2).y(5);
        Pointer<Point2D> ptr = Pointer.allocateArray(Point2D.class, 2);
        ptr.set(0, p1);
        ptr.set(1, p2);
        CLBuffer<Point2D> buf = ctx.createBuffer(CLMem.Usage.InputOutput, ptr);
        Pointer<Point2D> readptr = buf.read(q);
        q.finish();
        Point2D readp = readptr.get(0);
        Pointer<Point2D> newptr = Pointer.allocate(Point2D.class);
        newptr.set(readp); // <-- Error
    }

}

Thank you,
Volkan
Reply all
Reply to author
Forward
0 new messages