码迷,mamicode.com
首页 > 其他好文 > 详细

Qt中如何用指针返回参数

时间:2015-08-16 18:29:22      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:qt   指针   qt传参   qt指针传参   多个参数   

问题:在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

版权声明:本文为博主原创文章,未经博主允许不得转载。

Qt中如何用指针返回参数

标签:qt   指针   qt传参   qt指针传参   多个参数   

原文地址:http://blog.csdn.net/icfhsfmf/article/details/47703255

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!