c - Variable initialization and pointer segfault -


i thinking pointer initialization , tried following 2 cases:

#include <stdio.h>  int main(int argc, char **argv) {     int *d;     int f;     int p;      *d = 6;      printf("%d %d %d\n", *d, f, p);      return 0; } 

this code segfaults @ line (seen in gdb):

*d = 6; 

which makes sense because trying store value @ random address.

i tried following:

#include <stdio.h>  int main(int argc, char **argv) {     int *d;     int f = 10;     int p = 9;      *d = 6;      printf("%d %d %d\n", *d, f, p);      return 0; } 

this runs completion output:

6 10 9

if f initialized 10 (p not initialized) or vice versa, program still completes output

6 10 0

or

6 0 9

(p initialized). not understand why works. initial guess initialization of either f or p makes space or orients memory allow safe initialization of d. thought stack allocations, still unsure.

your first problem in *d = 6; you're trying to dereference invalid pointer.

d not initialized (allocated memory) , points invalid memory location. attempt dereference lead undefined behavior.

fwiw, second code produces ub same reason.

additionally, in first code snippet, writing

printf("%d %d %d\n", *d, f, p); 

where f , p uninitialized automatic local variable, you're trying read indeterminate values, again, produces ub. avoided in second snippet explicit initialization.


Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -