c++ - 在 C++ 中实例化指向新对象的指针时出现问题

标签 c++ pointers null instantiation

我是 C++ 的半新手。我已经尝试了一切但无法解决我的问题。只是为了一些背景:我正在使用 Botan 库进行加密。我认为这个问题与库没有任何关系,而更多地与指针和对象有关。

当我使用下面的代码时,没有问题。每行后面的注释解释了发生的情况。 (代码仅供说明)

int main(int argc, char** argv)
{
    DH_PrivateKey *Apriv = 0; // Apriv points to 0x00
    MemoryVector<unsigned char> *Apub = 0; // Irrelevant for now
    AutoSeeded_RNG rng; // Irrelevant object
    DL_Group domain("modp/ietf/3072"); // Irrelevant object
    Apriv = new DH_PrivateKey(rng,domain); // Apriv points to 0x8079098

这里的主要观察是一个对象被实例化并且 Apriv 指向该对象。这就是我想要发生的事情。当我尝试在将 Apriv 指针传递给的另一个函数中执行此操作时,问题就出现了。

我的主要代码更改为以下内容:

int main(int argc, char** argv)
{   
    DH_PrivateKey *Apriv = 0;
    MemoryVector<unsigned char> *Apub = 0;
    AutoSeeded_RNG rng;
    DL_Group domain("modp/ietf/3072");
    encryption::dh_generatekeys("modp/ietf/3072",Apriv,Apub); //Passing pointers

我将这些指针传递给的函数如下所示:

void encryptionalgorithm::dh_generatekeys(string shareddomain,DH_PrivateKey *privatekey,MemoryVector<unsigned char> *publickey)
{
    AutoSeeded_RNG rng; // Irrelevant
    DL_Group shared_domain(shareddomain); // Irrelevant
    privatekey = new DH_PrivateKey(rng, shared_domain); //[PROBLEM 1]
    MemoryVector<unsigned char> pubkey = privatekey->public_value();
    publickey = &pubkey;[PROBLEM 2]

我现在描述问题:

问题1:私钥指针仍然指向0x00,它没有指向新实例化的对象,这会导致段错误。 问题2:与publickey相同,当我在堆栈上创建“pubkey”然后将publickey指针指向其地址时,publickey只是保持0x00。

如有任何帮助,我们将不胜感激。我希望这很简单!

谢谢大家。

最佳答案

您的参数按值传递。

这意味着,如果您修改函数内指针 privatekey 的值,您只会修改该函数的本地变量。

您可能想要更改函数签名以接受参数作为引用:

void generatekeys(Something *& Apub, Something *& Apriv) { ... }

从右向左读取:Apub 是对指向 Something 的指针 * 的引用 & 。现在,对 generatekeys 内的 ApubApriv 进行的任何更改都将根据需要传播到外部,但请注意,您需要调用该函数传递适当的变量(左值),而不仅仅是一些表达式(右值)。

如有疑问,请进一步询问或通过 Google 获取引用参数。

关于c++ - 在 C++ 中实例化指向新对象的指针时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294816/

相关文章:

c++ - 将 Uint8(浮点 AUDIO_F32)转换为 int16_t(16 位 PCM)

c++ - 通过作为参数传递的指针更改 int 变量的值?

c - 数组连接函数返回乱码。

c++ - 在此函数中通过引用传递参数

c++ - QFile.write(myStruct)-怎么样?

c# - C# 中的 Nullsafe 导航

flutter - 断言失败 : line 22 pos 14: 'url != null' : is not true

c - 为什么在 C 中使用 strtok() 时需要使用 NULL 指针?

c++ - Array2 中的更改对 Array(表)有影响

c - 指向字符串的动态 char 指针数组