C++ Logo

std-discussion

Advanced search

C++ language has a big security hole.

From: Amit <amitchoudhary0523_at_[hidden]>
Date: Mon, 17 Feb 2025 15:03:05 +0530
C++ language has a big security hole. You can change the values of the
private member variables directly by getting the pointer to the
object. So, private member variables are actually not private, they
are public. Below is the example code:

--------------------------------------------------------------------------------

#include <iostream>

using namespace std;

class MyClass
{

private:
    int i;
    int j;

public:
    MyClass(int a, int b)
    {
        i = a;
        j = b;
    }

    void print_data()
    {
        cout << endl;
        cout << "i = " << i << ", j = " << j;
    }

}; // end of class MyClass

int main(void)
{

    MyClass myobj(1, 4);

    myobj.print_data();

    MyClass *m = &myobj;

    int *i_ptr = (int *)(m);
    int *j_ptr = i_ptr + 1;

    *i_ptr = 10;
    *j_ptr = 20;

    myobj.print_data();

    cout << endl << endl;

    return 0;

} // end of function main()

--------------------------------------------------------------------------------

The output is:

i = 1, j = 4
i = 10, j = 20

So, you see that the values of the private member variables ('i' and
'j') were changed directly by using pointers. So, the 'private'
keyword actually didn't serve its purpose.

Regards,
Amit

Received on 2025-02-17 09:33:18