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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章