相关文章推荐
博学的黄瓜  ·  sql server date ...·  1 年前    · 
阳刚的饭盒  ·  Effective ...·  1 年前    · 
有胆有识的玉米  ·  java 长度为2 ...·  1 年前    · 
unsigned char *q_dsc, *r_dsc; q_dsc = new unsigned char [MAX_DSC_LENGTH]; r_dsc = new unsigned char [MAX_DSC_LENGTH]; if ((q_file = fopen (q_fname.c_str(), "rb")) == NULL) traceMgr.start("no q_file"); if ((q_dsc_len = (int)fread (q_dsc, 1,MAX_DSC_LENGTH, q_file)) <= 0) traceMgr.start("no qdsc_file"); __android_log_print(ANDROID_LOG_INFO, "JNIMsg2","Q: %d , %p ", q_dsc_len,&q_dsc); fclose (q_file); if ((r_file = fopen (r_fname.c_str(), "rb")) == NULL) traceMgr.start("no r_file"); if ((r_dsc_len = (int)fread (r_dsc, 1, MAX_DSC_LENGTH, r_file)) <= 0) traceMgr.start("no rdsc_file"); __android_log_print(ANDROID_LOG_INFO, "JNIMsg1","R: %d , %p", r_dsc_len,&r_dsc); fclose (r_file); .....

我试图打印fread指针的地址,得到的结果是

01-24 16:13:46.791: I/JNIMsg2(18576): Q: 1020 , 0xbe85ead8

01-24 16:13:46.791: I/JNIMsg1(18576): R: 991 , 0xbe85eadc

这与无效堆有很大不同。

此外,我试着在for循环中只读一次,这样就不会出现崩溃。

        for (size_t i=0; i<n_matching_pairs; i++)
        /* read descriptors: */
        ......
        unsigned char *q_dsc, *r_dsc;
        q_dsc = new unsigned char [MAX_DSC_LENGTH];
        r_dsc = new unsigned char [MAX_DSC_LENGTH];
        if ((q_file = fopen (q_fname.c_str(), "rb")) == NULL)
            traceMgr.start("no q_file");
        if ((q_dsc_len = (int)fread (q_dsc, 1,MAX_DSC_LENGTH, q_file)) <= 0)
            traceMgr.start("no qdsc_file");
        __android_log_print(ANDROID_LOG_INFO, "JNIMsg2","Q:  %d , %p ", q_dsc_len,&q_dsc);
        fclose (q_file);

或者像这样减少文件读取范围的大小,也不会崩溃。

(MAX_DSC_LENGTH = 1024*32 --> decrease this to 100 would work, but 200 would crash again....)

        for (size_t i=0; i<n_matching_pairs; i++)
        /* read descriptors: */
        ......
        unsigned char *q_dsc, *r_dsc;
        q_dsc = new unsigned char [MAX_DSC_LENGTH];
        r_dsc = new unsigned char [MAX_DSC_LENGTH];
        if ((q_file = fopen (q_fname.c_str(), "rb")) == NULL)
            traceMgr.start("no q_file");
        if ((q_dsc_len = (int)fread (q_dsc, 1,100, q_file)) <= 0)
            traceMgr.start("no qdsc_file");
        __android_log_print(ANDROID_LOG_INFO, "JNIMsg2","Q:  %d , %p ", q_dsc_len,&q_dsc);
        fclose (q_file);
        if ((r_file = fopen (r_fname.c_str(), "rb")) == NULL)
            traceMgr.start("no r_file");
        if ((r_dsc_len = (int)fread (r_dsc, 1, 100, r_file)) <= 0)
            traceMgr.start("no rdsc_file");