gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:54 25 4
gpt4 key购买 nike

我是 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]

现在我将描述问题:

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

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

谢谢你们。

最佳答案

您的参数按值传递。

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

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

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

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

如有疑问,请进一步询问或谷歌引用参数。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com