#include <iostream>
using namespace std;
class test
{
public:
int a,b[100];
test() {
cout << "Constructor called" << " \n " ;
a=10;
}
};
int main()
{
test a1;
test *b2;
test *pointer = new test;
cout << a1.a << endl;
cout << pointer->a << " \n ";
cout << b2->a << " \n ";
return 0;
}
I would like to know if only two objects are created by the above code, for 'a1' object and 'pointer' object pointer. I assume pointer 'b2' does not get memory allocated for it. In that case, the last " cout << b2->a " should this create a segmentation fault. I am accessing a location whose memory I have not allocated. But I am not getting segmentation fault. Compiler justs prints a random value.
My question are "Are three objects allocated memory here or only two " ? Why there is no segmentation fault ?
a1 is allocated in automatic memory.
b2 is not an object (well, not an object of the type you defined), but a pointer, and it doesn't point to a valid location. It's a dangling pointer, dereferencing it results in undefined behavior. Anything can happen.
pointer is a pointer to an object in dynamic memory. It's not an object itself, but it points to the object created by new test.
Are three objects allocated memory here or only two
Only two.
Why there is no segmentation fault ?
Because undefined behavior means anything can happen. Any behavior is standard-compliant.
I assume pointer b2 does not get memory allocated for it?
In general when object is created memory is automatically created.
Always assign NULL when pointer to object is created, avoiding access violation.
Example:
test *b2; //not safe
test *b2 = NULL; // SAFE
Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With