Qt中如何用指针返回参数
2015-08-16 16:19
295 查看
问题:在qt中写一个方法,用指针做返回值,编译没有问题,但执行的时候程序会报错。
我的操作步骤:
1.新建一个Test的测试类,内容如下:
Test.h
Test.cpp
2.main方法去调用Test类中void fun(QString* pStr)方法,如下,程序编译执行一下,没有问题
3.接下来,打印一下main方法中参数pStr1的内容,理论下*pStr1的值会是”123456”,然后并非如此,如下图,编译时没有报错,而执行的时候程序报错了:
4.从步骤2到步骤3可以看出,代码是因为加了qDebug()<<*pStr1;后才报错的,那么问题就是在这里了,然后再看这个语句,心想,应该是*pStr1指向的内存被释放了,所以用*pStr1的时候就会导致程序崩溃,于是,做了如下验证(空间原因,下面直接写代码的形式呈现给大家):
编译执行后控制台显示:
指针pStr1为NULL
5.看来是pStr1指向的内容被释放了,但跟自己之前学了C++ new出来的东西要对应有delete,不然会一直存在于堆中,只有到程序完全结束才会被释放这块内存的理论不一致呀。于是看了如下一篇文章http://blog.csdn.net/dbzhang800/article/details/6300025,关于qt的delete问题,看完后,只明白Qt本身带有一个内存管理机制,但是现在如何修改代码,让程序实现用指针传参呢?
解决方法:
代码改写了fun函数的语句,不过我还是把整体的代码贴出来,大家好看清楚整体是怎么样的
Test.h
Test.cpp
main函数部分
程序编译后执行为:
大家好,我是绿色流氓兔,我希望我能把我遇到的一些问题,用图文并茂的方式写出来,分享给大家。欢迎和大家互相交流讨论,我是绿色流氓兔:QQ929955289
我的操作步骤:
1.新建一个Test的测试类,内容如下:
Test.h
Test.cpp
2.main方法去调用Test类中void fun(QString* pStr)方法,如下,程序编译执行一下,没有问题
3.接下来,打印一下main方法中参数pStr1的内容,理论下*pStr1的值会是”123456”,然后并非如此,如下图,编译时没有报错,而执行的时候程序报错了:
4.从步骤2到步骤3可以看出,代码是因为加了qDebug()<<*pStr1;后才报错的,那么问题就是在这里了,然后再看这个语句,心想,应该是*pStr1指向的内存被释放了,所以用*pStr1的时候就会导致程序崩溃,于是,做了如下验证(空间原因,下面直接写代码的形式呈现给大家):
#include "Test.h" #include <QtCore> int main(int argc, char *argv[]) { QApplication a(argc, argv); QString *pStr1=NULL; Test t ; t.fun(pStr1); if(pStr1 == NULL) { qDebug()<<"指针pStr1为NULL"; } else { qDebug()<<"*pStr1="<<*pStr1; } return 0; }
编译执行后控制台显示:
指针pStr1为NULL
5.看来是pStr1指向的内容被释放了,但跟自己之前学了C++ new出来的东西要对应有delete,不然会一直存在于堆中,只有到程序完全结束才会被释放这块内存的理论不一致呀。于是看了如下一篇文章http://blog.csdn.net/dbzhang800/article/details/6300025,关于qt的delete问题,看完后,只明白Qt本身带有一个内存管理机制,但是现在如何修改代码,让程序实现用指针传参呢?
解决方法:
代码改写了fun函数的语句,不过我还是把整体的代码贴出来,大家好看清楚整体是怎么样的
Test.h
#ifndef TEST_H #define TEST_H #include <QtCore> class Test { public: Test(); public: void fun(QString* pStr); }; #endif // TEST_H
Test.cpp
#include "Test.h" Test::Test() { } void Test::fun(QString *pStr) { QString s = "123456"; *pStr = s; }
main函数部分
#include "Test.h" #include <QtCore> int main(int argc, char *argv[]) { QApplication a(argc, argv); QString *pStr1 = new QString; Test t ; t.fun(pStr1); if(pStr1 == NULL) { qDebug()<<"指针pStr1为NULL"; } else { qDebug()<<"*pStr1="<<*pStr1; } return 0; }
程序编译后执行为:
大家好,我是绿色流氓兔,我希望我能把我遇到的一些问题,用图文并茂的方式写出来,分享给大家。欢迎和大家互相交流讨论,我是绿色流氓兔:QQ929955289
相关文章推荐
- 关于指针的一些事情
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- C# Pointer指针应用实例简述
- C++智能指针实例详解
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- 详解C++中的指针、数组指针与函数指针
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- C#通过指针实现快速拷贝的方法
- php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
- C#通过指针读取文件的方法
- C语言指针学习经验总结浅谈
- C++交换指针实例
- C/C++中指针和引用之相关问题深入研究
- Qt定时器和随机数详解