'LateBinding with dynamic memory
I have Base and Derive class at the below which related to polymorphism (Latebinding) :
class Base
{
....
};
class Derive:public Base
{
....
};
int main()
{
int n;
cin>>n;
Base *pt;
pt=new Derive[n];
for(int i=0;i<n;i++)
pt[i].Input();
}
While I was inputing the first index of pt[0]
it's fine, but in index[1]
the program is forced to close. Any idea why?
Solution 1:[1]
An array of Base
is not an array of Derived
. A Derived
instance can be larger than a Base
, and then address calculations go haywire when the array is treated as array of Base
. For this reason the standard specifies Undefined Behavior in this case.
Instead you can use an array of pointers to Base
.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |