digitalmars.D.learn - How is this an "Access Violation"
- Ruby The Roobster (80/83) Oct 26 2020 Following function when called throws an access violation. I
- Imperatorn (4/8) Oct 27 2020 OT, but why do you have a function that immediately replaces what
- Rene Zwanenburg (6/16) Oct 27 2020 Going by the assert this is a member function of a class or
- Ruby The Roobster (4/8) Oct 27 2020 Okay. I messed up here. It should be: this.base = new atom(...) .
- Ruby The Roobster (8/17) Oct 28 2020 Turns out all attempts to access member variables of that class
- Ruby The Roobster (4/22) Oct 28 2020 Nevermind. I should just have done my research and paid more
Following function when called throws an access violation. I
think it has to do with the assert statements, but I don't know
why.
void construct(string type,atom base,atom bonded)
{
base = new
atom(base.name.idup,base.mass,base.electro_negativity,base.valence_electrons,base.electrons,base.protons,base.neutrons,base.pos);
bonded = new
atom(bonded.name.idup,bonded.mass,bonded.electro_negativity,bonded.valence_electrons,bonded.electrons,bonded.protons,bonded.neutrons,bonded.pos);
if(type == "single")
{
assert(this.base.valence >= 1 && this.bonded.valence
=1 && this.base.electro_negativity >= 0 &&
this.bonded.electro_negativity >= 0,"For a single bond, both
atoms need to have at least one free electron and have to have
electro negativity.");
this.type = "single".dup;
}
else if(type == "double")
{
assert(this.base.valence >= 2 && this.bonded.valence
=2 && this.base.electro_negativity >= 0 &&
this.bonded.electro_negativity >= 0,"For a double bond, both
atoms need to have at least one free electron and have to have
electro negativity.");
this.type = "double".dup;
}
else if(type == "triple")
{
assert(this.base.valence >= 3 && this.bonded.valence
=3 && this.base.electro_negativity >= 0 &&
this.bonded.electro_negativity >= 0,"For a triple bond, both
atoms need to have at least one free electron and have to have
electro negativity.");
this.type = "triple".dup;
}
else if(type == "ionic")
{
bool this_electro_negativity_greater;
if((this.base.electro_negativity >
this.bonded.electro_negativity))
this_electro_negativity_greater = true;
else if((this.base.electro_negativity <
this.bonded.electro_negativity))
this_electro_negativity_greater = false;
if(this_electro_negativity_greater)
{
assert(((this.base._valence_electrons ==
this.base.valence) && (this.bonded._valence_electrons ==
this.bonded.valence)),"Atoms in an ionic bond can't already be
ions.");
int fullValence;
if(this.base.electrons < 2)
fullValence = 2;
else
fullValence = 8;
assert((fullValence -
this.base.valence_electrons) ==
(this.bonded.valence_electrons),"The amount valence electrons in
the atom with less valence electrons must be the same as the
value of (8 - (the amount of valence electrons in the atom with
more valence electrons))");
}
else
{
assert(((this.base._valence_electrons ==
this.base.valence) && (this.bonded._valence_electrons ==
this.bonded.valence)),"Atoms in an ionic bond can't already be
ions.");
int thatFullValence;
if(this.bonded.electrons < 2)
thatFullValence = 2;
else
thatFullValence = 8;
assert((thatFullValence -
this.bonded.valence_electrons) ==
(this.base.valence_electrons),"The amount valence electrons in
the atom with less valence electrons must be the same as the
value of (8 - (the amount of valence electrons in the atom with
more valence electrons))");
}
}
}
Oct 26 2020
On Tuesday, 27 October 2020 at 02:05:37 UTC, Ruby The Roobster wrote:Following function when called throws an access violation. I think it has to do with the assert statements, but I don't know why. [...]OT, but why do you have a function that immediately replaces what you passed?
Oct 27 2020
On Tuesday, 27 October 2020 at 02:05:37 UTC, Ruby The Roobster
wrote:
void construct(string type,atom base,atom bonded)
{
base = new
atom(base.name.idup,base.mass,base.electro_negativity,base.valence_electrons,base.electrons,base.protons,base.neutrons,base.pos);
(...)
assert(this.base.valence >= 1 &&
this.bonded.valence >=1 && this.base.electro_negativity >= 0 &&
this.bonded.electro_negativity >= 0,"For a single bond, both
atoms need to have at least one free electron and have to have
electro negativity.");
Going by the assert this is a member function of a class or
struct with base and bonded members. I think you meant to assign
the newly created atoms to those fields instead of overwriting
your arguments.
Oct 27 2020
On Tuesday, 27 October 2020 at 02:05:37 UTC, Ruby The Roobster wrote:Following function when called throws an access violation. I think it has to do with the assert statements, but I don't know why. [...]Okay. I messed up here. It should be: this.base = new atom(...) . I corrected that. The assert statements still don't work though.
Oct 27 2020
On Wednesday, 28 October 2020 at 00:48:36 UTC, Ruby The Roobster wrote:On Tuesday, 27 October 2020 at 02:05:37 UTC, Ruby The Roobster wrote:Turns out all attempts to access member variables of that class fail: atom a = new atom(...); a.valence = 5; Output: Object.Error (0): Access ViolationFollowing function when called throws an access violation. I think it has to do with the assert statements, but I don't know why. [...]Okay. I messed up here. It should be: this.base = new atom(...) . I corrected that. The assert statements still don't work though.
Oct 28 2020
On Wednesday, 28 October 2020 at 12:33:18 UTC, Ruby The Roobster wrote:On Wednesday, 28 October 2020 at 00:48:36 UTC, Ruby The Roobster wrote:Nevermind. I should just have done my research and paid more attention.On Tuesday, 27 October 2020 at 02:05:37 UTC, Ruby The Roobster wrote:Turns out all attempts to access member variables of that class fail: atom a = new atom(...); a.valence = 5; Output: Object.Error (0): Access ViolationFollowing function when called throws an access violation. I think it has to do with the assert statements, but I don't know why. [...]Okay. I messed up here. It should be: this.base = new atom(...) . I corrected that. The assert statements still don't work though.
Oct 28 2020









Imperatorn <johan_forsberg_86 hotmail.com> 