gpt4 book ai didi

c++ - 为什么调用 QFtp.put 会导致崩溃?

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:36 27 4
gpt4 key购买 nike

我正在尝试使用 QFtp 将 .avi 文件上传到 FTP 服务器:

void MyFTP::recordingDone(QString &fileName){
remainingFiles.push_back(new QString(fileName));

commands[qftp.connectToHost(globalProperties.ftpServer)] = "connect to host";
commands[qftp.login(globalProperties.ftpUsername,globalProperties.ftpPassword)] = "login";
commands[qftp.cd("myapp")] = "cd myapp";
commands[qftp.cd("Videos")] = "cd videos";
QDir().cd(globalProperties.videoStorageLocation);
qDebug()<<"Opening "<<fileName<<endl;
if(QFile::exists(fileName)){
qDebug()<<"File exists"<<endl;
}
else{
qDebug()<<"File does not exist"<<endl;
}
QFile file(fileName);
qDebug()<<"putting"<<endl;
qftp.put(&file,fileName);
qDebug()<<"Closing ftp"<<endl;
qftp.close();
}

我连接到命令完成信号并使用插槽调试输出信息:

void TrusionFTP::ftpCommandDone(int id, bool error){    
qDebug()<<"command: "<<commands[id]<<": "<<error;
if(error){
qDebug()<<qftp.errorString()<<endl;
if (qftp.hasPendingCommands()){
qDebug()<<"Pending commands"<<endl;
}
}
}

这是崩溃前的输出:

Opening  "2012-Mar-06-12-19-57.avi" 

File exists

putting

Closing ftp

command: "connect to host" : false
command: "login" : false
command: "cd trusion" : false
command: "cd videos" : false

如果我不关闭 ftp 连接,也会发生崩溃。该文件永远不会进入服务器。

最佳答案

QFile file(fileName); 
ids.push_back(qftp.put(&file,fileName));

file 驻留在堆栈上。 file 的生命周期在成员函数 void MyFTP::recordingDone(QString &fileName) 返回时结束。但是 qftp 仍然引用它。当您尝试访问不再存在的 file 时,这可能会导致崩溃。而是在堆上分配 file

关于c++ - 为什么调用 QFtp.put 会导致崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com