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