在函数内部初始化无符号字符指针将返回空指针[重复]

问题描述 投票:0回答:1

这是我的测试代码

#include <QCoreApplication>
#include <QDebug>

void fillData(unsigned char *data){
    data = new unsigned char[10];
    for (int i = 0; i < 10; i++){
        data[i] = static_cast<unsigned char>(i);
    }
    qDebug() << "Returning wiht non null data?" << (data == nullptr);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    unsigned char *data = nullptr;
    qDebug() << "Is data null" << (data == nullptr);
    fillData(data);
    qDebug() << "Is data null" << (data == nullptr);

    return a.exec();
}

我需要在函数中填充一个指向字节数组的指针,我在应用程序中注意到我一直在获取null。所以我写了这个MWE。由于此程序的输出为

,因此会重现该问题。
Is data null true
Returning wiht non null data? false
Is data null true

[当我希望他们的问题返回false时。我不知道自己在做什么错。

c++ qt reference pass-by-reference
1个回答
3
投票

该函数处理原始变量的副本。函数参数是其局部变量。

您必须以C ++含义或C含义通过引用传递指针。例如

C ++通过引用传递

void fillData(unsigned char * &data){
    data = new unsigned char[10];
    for (int i = 0; i < 10; i++){
        data[i] = static_cast<unsigned char>(i);
    }
    qDebug() << "Returning wiht non null data?" << (data == nullptr);
}

C通过引用传递

void fillData(unsigned char **data){
    *data = new unsigned char[10];
    for (int i = 0; i < 10; i++){
        ( *data )[i] = static_cast<unsigned char>(i);
    }
    qDebug() << "Returning wiht non null data?" << (*data == nullptr);
}

在这种情况下,函数调用看起来像

fillData( &data );
© www.soinside.com 2019 - 2024. All rights reserved.