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

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -