比较两个文件,知道分段错误发生在哪里

奥古斯丁·巴拉奇纳

我有以下结构:

int main(int argc, char **argv) {
     try {
        FX3USBConnection fx3USB3Connection = FX3USB3Connection();
        fx3USB3Connection.send_text_file();
    }
    catch (ErrorOpeningLib& e) {
        printf("Error opening library\n");
        return -1;
    }
    catch (NoDeviceFound& e) {
        printf("No device found\n");
        return 0;
    }

    return 0;
}

在 send_text_files 中,我做的最后一件事是比较两个 txt 文件,如下所示:

printf("Loopback recieved, checking if I received the same that I sended\n");
files_match(out_text_filename, in_text_filename);
printf("Exited without problem");
return; // (actually implicit)

我已经使用了 2 个版本的files_match函数,但最后一个是这个比较两个文件的精确副本

bool FX3USB3Connection::files_match(const std::string &p1, const std::string &p2) {
    bool files_match;
    std::ifstream f1(p1, std::ifstream::binary|std::ifstream::ate);
    std::ifstream f2(p2, std::ifstream::binary|std::ifstream::ate);

    if (f1.fail() || f2.fail()) {
        return false; //file problem
    }

    if (f1.tellg() != f2.tellg()) {
        return false; //size mismatch
    }

    //seek back to beginning and use std::equal to compare contents
    f1.seekg(0, std::ifstream::beg);
    f2.seekg(0, std::ifstream::beg);
    files_match = std::equal(std::istreambuf_iterator<char>(f1.rdbuf()),
                      std::istreambuf_iterator<char>(),
                      std::istreambuf_iterator<char>(f2.rdbuf()));
    f1.close();
    f2.close();
    if (files_match) { printf("Files match\n"); }
    else { printf("Files not equal\n"); }
    return files_match;
}

有时我会出错,有时我不会。当我收到错误时,我得到:

Loopback recieved, checking if I received the same that I sended
Files match

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

所以,调用后的打印files_match没有被打印,所以我猜问题出在函数内。但是,我在 return 语句之前进行了打印,并且打印正确。

PS:我评论了功能files_match,我没有问题。

PS1:文件可以有这样的字符:¥

奥古斯丁·巴拉奇纳

是的,正如@john 建议的那样,我必须添加 fflush() 函数。在那里我意识到错误实际上在所有这个循环之外,但实际上是在退出 try{} 部分时。在我看来,它没有设法破坏 fx3USBConnection。

谢谢!现在知道 fprint 实际上被缓冲了,我被误导了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何知道动态内容中的CSS错误发生在哪里或如何在CSS错误时停止脚本

来自分类Dev

比较两个文件的第二个字节时出现分段错误

来自分类Dev

两个日期之间的天数。日期错误在哪里?

来自分类Dev

gdb报告分段错误-如何知道在哪里?

来自分类Dev

无限循环发生在哪里?

来自分类Dev

我的QuickSort代码有时会运行,但有时却无法运行,而且我不知道错误发生在哪里

来自分类Dev

我想要日期字段条件在哪里的数据-比较两个日期丢弃时间部分

来自分类Dev

比较两个错误

来自分类Dev

我的调试器说我有一个段错误,但无法告诉我在特定情况下会发生在哪里

来自分类Dev

有两个指针的分段错误

来自分类Dev

比较两个文件

来自分类Dev

两个文件的比较

来自分类Dev

比较两个文件

来自分类Dev

一起使用的这两个查询中的语法错误在哪里

来自分类Dev

Azure持久功能中的IoC发生在哪里?

来自分类Dev

无论触摸发生在哪里,都滚动 UIScrollView

来自分类Dev

在CsvHelper中,如何捕获转换错误并知道发生在哪个字段和哪一行?

来自分类Dev

如何使用空手道比较两个json对象,元素的顺序要保留在哪里?

来自分类Dev

SQL在哪里使用两个变量排除范围

来自分类Dev

在哪里放置共享两个类的逻辑的方法

来自分类Dev

awk比较两个文件

来自分类Dev

逐字节比较两个文件

来自分类Dev

awk比较两个以上的文件

来自分类Dev

比较两个文件的内容

来自分类Dev

逐行比较两个文件的单列

来自分类Dev

逐行比较两个文件

来自分类Dev

在Linux行尾比较两个文件

来自分类Dev

比较两个文件的列

来自分类Dev

比较两个文件的列

Related 相关文章

热门标签

归档