Issues when instantiating a pointer to a new object in c++ -
i'm semi new c++. have tried couldn't solve problem. background: i'm using botan library encryption. don't think problem has library, more pointers , objects.
when use following code, there no problems. comments after each line explains happens. (the code explanation purposes only)
int main(int argc, char** argv) { dh_privatekey *apriv = 0; // apriv points 0x00 memoryvector<unsigned char> *apub = 0; // irrelevant autoseeded_rng rng; // irrelevant object dl_group domain("modp/ietf/3072"); // irrelevant object apriv = new dh_privatekey(rng,domain); // apriv points 0x8079098
the main observation here object instantiated , apriv points object. want happen. problem comes in when try in function pass apriv pointer to.
my main code changes following:
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
and function pass these pointers looks this:
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]
i describe problems:
problem 1: privatekey pointer still points 0x00, not point newly instantiated object, , later causes segmentation errors. problem 2: same publickey, when create "pubkey" on stack , point publickey pointer address, publickey stays 0x00.
any appreciated. hope simple!
thanks guys.
your parameters passed value.
this means, if modify value of pointer privatekey
inside function, modify variable local function.
you might want change function signature accept parameters references instead:
void generatekeys(something *& apub, *& apriv) { ... }
this reads right-to-left: apub
reference &
pointer *
something
. changes apub
, apriv
inside generatekeys
propagate outside want, note you'll need call function passing proper variables (lvalues), not expressions (rvalues).
if in doubt, ask further or have google reference parameters.
Comments
Post a Comment