在函数内初始化无符号字符指针将返回空指针

Initializing unsigned char pointer inside function returns null pointer

本文关键字:指针 返回 空指针 字符 无符号 函数 初始化      更新时间:2023-10-16

这是我的测试代码

#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

当我期望他们的问题返回错误时。我不知道我做错了什么。

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

您必须通过引用传递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 );