User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C section within the Software Development category of DaniWeb, a massive community of 456,577 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,629 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C advertiser: Programming Forums
Views: 1842 | Replies: 1
Reply
Join Date: Aug 2004
Posts: 6
Reputation: vivekgalatage is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
vivekgalatage vivekgalatage is offline Offline
Newbie Poster

Solution How to avoid the situation

  #1  
Aug 16th, 2004
#include <stdio.h>
#include <stdlib.h>
class A
{
int a;
public:
A()
{
a=100;
}

int get()
{
return a;
}
};

int main()
{
A *a=new A();
int *p=(int *)a;

printf("%d\n",a->get());

*p=200;

printf("%d\n",a->get());

system("pause");
}

its out put is -
100
200

so can any body help me to avoid this situation bcoz as we can observ the class definition we can access the private members.
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Jun 2004
Location: Marin, CA, USA
Posts: 434
Reputation: Chainsaw is an unknown quantity at this point 
Rep Power: 5
Solved Threads: 10
Chainsaw's Avatar
Chainsaw Chainsaw is offline Offline
Unprevaricator

Re: How to avoid the situation

  #2  
Aug 16th, 2004
What are you trying to avoid? Hacking? You hacked this and claim that you can access the private member a->a; All the 'private' designation means is that you can't access it via referencing it normally in the compiler; there's no implied protection of the memory area.

Try "a->a = 200;" and the compiler will tell you that you can't access a private member. That is a COMPILE time protection; what you demonstrated is a RUNTIME access.

Incidentally, add this to your definition of the class A:

virtual ~A() { a = 0; }

and try your hack. The output will read 100 and 100 and then your program will crash, because the vtable pointer for the destructor was set to 200.
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb C Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the C Forum

All times are GMT -4. The time now is 6:19 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC