|
1Qter豆
本帖最后由 yiqinnerry 于 2017-11-26 16:15 编辑
请问我在一个函数里面给变量赋值,然后在另一个函数里面使用,怎么会出错的?
Qstring logpath;
char* log_path;
赋值的函数:
void Plot_Tool::Getlogpath()
{
logpath = QFileDialog::getOpenFileName(this, NULL, "/", "*.log");
QByteArray ba = logpath.toLatin1();
log_path = ba.data();
qDebug() << log_path; --------------------------此处打印出来的值是正确的
}
在另一个函数中使用log_path就不对了
比如:
void Plot_Tool:: Print()
{
qDebug() << log_path; --------------------------此处打印出来的不对,是一串问号
}
请问这是为什么呢?要在另一个函数中使用log_path的话有该怎么使用呢?
|
最佳答案
查看完整内容
这是一个C++的基础问题。
log_path 就是个指针,其指向的内存是 void Plot_Tool::Getlogpath() 中的局部变量 ba 所管理的,当执行完函数 void Plot_Tool::Getlogpath() 后, ba 的生存期结束了,它所管理的那块内存也被释放了,因此 log_path 指向的就是一块无效的内存,对它的访问也是非法的。
要想在其它地方访问,应该对 data() 返回的数据进行拷贝。但更正确的做法应该是直接使用 QByteArray 而避免使用裸指针。
参见:
char ...
|