找回密码
 立即注册
收起左侧

变量问题

2
回复
5870
查看
[复制链接]
累计签到:30 天
连续签到:1 天
来源: 2017-11-26 16:09:42 显示全部楼层 |阅读模式
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 ...
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2017-11-26 16:09:43 显示全部楼层
本帖最后由 miroox 于 2017-11-26 17:36 编辑

这是一个C++的基础问题。
log_path 就是个指针,其指向的内存是 void Plot_Tool::Getlogpath() 中的局部变量 ba 所管理的,当执行完函数 void Plot_Tool::Getlogpath() 后, ba 的生存期结束了,它所管理的那块内存也被释放了,因此 log_path 指向的就是一块无效的内存,对它的访问也是非法的。
要想在其它地方访问,应该对 data() 返回的数据进行拷贝。但更正确的做法应该是直接使用 QByteArray 而避免使用裸指针。

参见:
char *QByteArray::data()
C++:生存期

参与人数 2人气 +4 收起 理由
kenneth + 2 对我帮助很大!
bycy0801 + 2 很对

查看全部评分总评分 : 人气 +4

回复

使用道具 举报

累计签到:30 天
连续签到:1 天
2017-11-26 18:30:20 显示全部楼层
miroox 发表于 2017-11-26 17:33
这是一个C++的基础问题。
log_path 就是个指针,其指向的内存是 void Plot_Tool::Getlogpath() 中的局部变 ...

照你说的方法问题解决了,万分感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了