【问题标题】:Getting malloc error with Java jna and FFTW3 wrapper使用 Java jna 和 FFTW3 包装器获取 malloc 错误
【发布时间】:2014-05-30 15:26:52
【问题描述】:

我正在使用取自 this 问题的 Java fftw3 包装器。 (代码here

我只是想对双元素数组应用第二类型 DCT 变换,但如果我尝试调用 fftw_execute 方法,我会不断收到此错误:

java(787,0x10b243000) malloc: *** error for object 0x7fba642c5408: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

为什么?

这是我的代码:

package com.project.fftw3;

import java.io.File;
import java.io.IOException;
import java.nio.DoubleBuffer;

import fftw3.FFTW3Library;
import fftw3.FFTW3Library.fftw_plan;

public class MainClass {
    static FFTW3Library fftw = FFTW3Library.INSTANCE;

    public static void main(String[] args) {
        int i,j,w,h;
        File in = new File("Images/Baboon.bmp");
        //File out = new File("Baboon-" + System.currentTimeMillis() + ".txt");
        try {
            ImageMatrix im = new ImageMatrix(in);
            w=im.getImageWidth();
            h=im.getImageHeight();
            double [] row = im.getRow(0);
            double [] oarr = new double[w];
            DoubleBuffer din = DoubleBuffer.wrap(row);
            DoubleBuffer dout = DoubleBuffer.wrap(oarr);
            fftw_plan p = fftw.fftw_plan_dft_1d(din.array().length,din,dout,5,FFTW3Library.FFTW_ESTIMATE); //5 is REDFT10
            fftw.fftw_execute(p);
            fftw.fftw_destroy_plan(p);
        } catch (IOException e) {
        }
    }
}

【问题讨论】:

    标签: java c jna fftw


    【解决方案1】:

    您的尺寸似乎有误:

            double [] oarr = new double[h];
    

    将其更改为:

            double [] oarr = new double[w];
    

    这与您看到的错误一致,假设 w > h。

    【讨论】:

    • 这肯定是一个错误,但我的测试图像是 512x512,我仍然有问题
    • 在这种情况下,我只能建议检查有关所需缓冲区大小的文档,因为听起来您正在写入超出分配缓冲区的末尾并破坏了堆。
    • 我已经看到缓冲区是这样定义的in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);fftw_complex 被定义为typedef double fftw_complex[2]; 所以我尝试了oarr=new double[w*2]。我没有收到错误,但结果数组包含所有零。
    • 我已经切换到 C++ ,但你的猜测是正确的。一旦我在 C++ 中完成它,我就明白缓冲区的大小错误且填充错误。
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 2011-08-11
    • 2021-02-18
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多