我对 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:privatekey指针仍然指向0x00,它没有指向新实例化的对象,这会导致后面的分段错误。问题2:与publickey相同,当我在堆栈上创建“pubkey”然后将publickey指针指向它的地址时,publickey只是保持0x00。
任何帮助,将不胜感激。我希望这很简单!
多谢你们。