**p; *
Explanation: By default C thinks everything is an int. So p is a global
variable of type *pointer to an int.*Now like other global variables it is
very very very very likely  that the compiler will associate p with an
address that is *0.*Or in terms of pointers it is  *NULL.* That is
printf("%d\n",p) should give 0.
**p=0;*
*
*
What happens when you do **(some_ptr)? *The address stored by some_ptr is
referred to. So when we try to do **p=0 the address pointed by p is
referred,which is NULL,and by the law of the land trying to read/write from
memory with address NULL is sin. *So you get segmentation fault.

Saurabh Singh
B.Tech (Computer Science)
MNNIT
blog:geekinessthecoolway.blogspot.com


On Sat, Dec 22, 2012 at 10:52 AM, Saurabh Paliwal <
[email protected]> wrote:

> I am afraid both of you are incorrect..
> 1. since the code modified by you will compile but give sigsegv anyway.
> 2. The statement " *p = 0; " has nothing to do with the " random address"
> you are talking about.
>
>
> On Mon, Dec 17, 2012 at 7:25 PM, Prakhar Jain <[email protected]>wrote:
>
>> You are initialising random memory address with 0, which OS doesn't allow.
>>
>> On 12/17/12, Shubham Sandeep <[email protected]> wrote:
>> > how does this code achieve SIGSEGV????
>> > code:
>> >  *p;main(){*p=0;}
>> >
>> > --
>> > Regards,
>> > SHUBHAM SANDEEP
>> > IT 3rd yr.
>> > NIT ALD.
>> >
>> > --
>> >
>> >
>> >
>>
>>
>> --
>> --
>> Prakhar Jain
>> IIIT Allahabad
>> B.Tech IT 4th Year
>> Mob no: +91 9454992196
>> E-mail: [email protected]
>>           [email protected]
>>
>> --
>>
>>
>>
>
>
> --
>  -    Saurabh Paliwal
>
>        B-Tech. Comp. Science and Engg.
>
>        IIT ROORKEE
>
> --
>
>
>

-- 


Reply via email to