微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当stderrredirect到pipe道时,为什么boost :: process在Windows上崩溃?

代码基于boost::process 1.65.1样本,并修正了一些拼写错误

#include <boost/process.hpp> int main(int argc,char *argv[]) { boost::asio::io_service ios; std::future<std::vector<char>> output,error; boost::process::child c("hostname.exe",boost::process::std_out > output,boost::process::std_err > boost::process::null,ios); ios.run(); c.wait(); if (output.valid()) { auto processOutput = output.get(); processOutput.push_back(''); printf(processOutput.data()); } if (error.valid()) { auto processError = error.get(); processError.push_back(''); printf(processError.data()); } return 0; }

它按预期工作。 它运行hostname.exe并打印其输出,即您的计算机networking名称

您可能会看到errorvariables未被使用。 读也stderr是逻辑的,即使hostname.exe通常不使用它,实际的subprocess当然可以使用它。 用boost::process::std_err > errorreplaceboost::process::std_err > boost::process::null看起来微不足道。 但是,这会导致崩溃。 错误消息如下所示:

vector iterator not dereferencable

有谁知道的原因,如何绕过这个错误

C ++程序的单个实例,使用boost :: interprocess

如何捕捉不是从你的线程抛出?

C ++ Boost为两个不同的进程创build共享内存

在Winx64中使用Boost :: asio:我卡住了,需要弄清楚如何为x64构buildlibboost_system_xxxx.lib

使用boost python的python模块是空的?

如何使用BCP提取可以构build的Boost的子集?

在Windows 7上使用boost来设置Clion

在新鲜的下载提升中缺lessJam文件

具有细粒度锁的线程安全链接列表

batch file不可执行不像shell脚本?

这是Boost过程中的一个错误。 崩溃出现在includeboostprocessdetailwindowsasync_out.hpp导致崩溃的代码如下:

arg.resize(buffer->size()); is.read(&*arg.begin(),buffer->size());

我们重定向std_err还是std_out并不重要。 当流不生成任何输出时出现问题。 对于hostname.exe它是std_err ,但是,如果您尝试运行pyw.exe ,您也会得到std_out这个错误

当progam不产生输出时, buffer->size()返回0,所以vector变成空的。 它看起来像尝试解引用空向量导致崩溃(调试断言)在Visual C ++。

修复如下:

auto bufferSize = buffer->size(); if (bufferSize) { arg.resize(buffer->size()); is.read(&*arg.begin(),buffer->size()); }

我没有提交这个错误报告来提振,如果有人有时间,让他这样做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐