您的位置:首页 > 编程语言 > Qt开发

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的时候就会导致程序崩溃,于是,做了如下验证(空间原因,下面直接写代码的形式呈现给大家):

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息