我想从我的Qt应用程序将G-CODEs传递给3D打印机。我有一个函数,它接受一个QString并将其作为参数传递给外部程序:
void MainWindow::gcodeRelay( const QString &gcode )
{
QObject *parent;
relayProcess= new QProcess(parent);
QString program = "./gcoderelay/gcoderelay";
relayProcess->start(program, QStringList() << ui->tcp_server->text() << ui->client_port->text() << gcode );
}
但调用该函数会导致程序因segfault而崩溃:
void MainWindow::on_custom_gcode_clicked()
{
QString gcode = ui->line_custom_gcode->text(); //SEGFAULT
gcodeRelay( gcode );
}
这有效:
void MainWindow::on_custom_gcode_clicked()
{
QString gcode = "G28"; //WORKS
gcodeRelay( gcode );
}
有趣的是,这不是:
void MainWindow::on_custom_gcode_clicked()
{
QString gcode;
gcode = "G28"; //SEGFAULT
gcodeRelay( gcode );
}
根据调试程序,当新进程创建(在它开始之前)发生崩溃时
为什么会这样?另外,我对最后两段代码之间的差异以及它如何导致这样的问题感到困惑?
谢谢你,我只是学习,所以要善待:)