首页 > 解决方案 > 什么会导致无效地址 0xda9739b8 传递给 free:值未分配?

问题描述

我正在尝试通过蓝牙从三十部分机器(EEG 耳机)中检索信号并将其写入 file.csv。现在,我与耳机成功连接,但在录制信号时遇到了一个我不知道的致命信号。

这是我可能认为可能是问题的代码:

IEE_DataChannel_t[] Channel_list;
String[] Name_Channel = {"AF3","T7","Pz","T8","AF4"};

以及检索数据的功能

        case 2:
            if(bp_writer == null) return;
            for(int i=0; i < Channel_list.length; i++)
            {
                SWIGTYPE_p_double ptheta = edkJava.new_double_p();
                SWIGTYPE_p_double palpha = edkJava.new_double_p();
                SWIGTYPE_p_double plow_beta = edkJava.new_double_p();
                SWIGTYPE_p_double phigh_beta = edkJava.new_double_p();
                SWIGTYPE_p_double pgamma = edkJava.new_double_p();
                int result = -1;
                result = edkJava.IEE_GetAverageBandPowers(userId, Channel_list[i], ptheta, palpha, plow_beta, phigh_beta, pgamma);
                if(result == edkJava.EDK_OK){
                    Log.e("FFT", "GetAverageBandPowers");
                    try {
                        bp_writer.write(Name_Channel[i] + ",");
                        addData(edkJava.double_p_value(ptheta));
                        addData(edkJava.double_p_value(palpha));
                        addData(edkJava.double_p_value(plow_beta));
                        addData(edkJava.double_p_value(phigh_beta));
                        addData(edkJava.double_p_value(pgamma));
                        bp_writer.newLine();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                edkJava.delete_double_p(ptheta);
                edkJava.delete_double_p(palpha);
                edkJava.delete_double_p(plow_beta);
                edkJava.delete_double_p(phigh_beta);
                edkJava.delete_double_p(pgamma);
            }
            break;
        }

    }

};

有添加数据和设置file.csv的功能:

private void setDataFile() {
    try {
        String eeg_header = "Channel , Theta ,Alpha ,Low beta ,High beta , Gamma ";
        File root = Environment.getExternalStorageDirectory();
        String file_path = root.getAbsolutePath()+ "/FFTSample/";
        File folder=new File(file_path);
        if(!folder.exists())
        {
            folder.mkdirs();
        }
        bp_writer = new BufferedWriter(new FileWriter(file_path+"bandpowerValue.csv"));
        bp_writer.write(eeg_header);
        bp_writer.newLine();
    } catch (Exception e) {
        Log.e("","Exception"+ e.getMessage());
    }
}

public void addData(double data) {

    if (bp_writer == null) {
        return;
    }

        String input = "";
            input += (String.valueOf(data) + ",");
        try {
            bp_writer.write(input);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}


它成功添加了用户,但是当开始录制时,我遇到了

A/libc: Invalid address 0xda9739b8 passed to free: value not allocated 
A/libc: Invalid address 0xda973068 passed to free: value not allocated 
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 3969 (motiv.fftsample) 
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 3938 (motiv.fftsample) 
I/libc: Another thread contacted debuggerd first; not contacting debuggerd.

那么,我如何跟踪错误,我只是构建应用程序的初学者。谢谢

标签: javaandroidandroid-permissionsfatal-error

解决方案


推荐阅读