c - segmentation fault while calling strlen with a previously allocated pointer -
up until have had code worked regarding variable called wfiles
. wfiles initialized within main file:
char* wfiles = "";
which far can tell c has no complaints. next wfiles
variable allocated in switch statement:
switch (c) { case 't': /* user wants template */ template = optarg; break; case 'f': wfiles = optarg; break; case 'v': vcs = optarg; break; case 'u': url = optarg; break; case 's': /* custom save location */ save_loc = optarg; break; case '?': break; default: abort(); }
finally check whether or not wfiles
empty:
if (!empty(wfiles))
empty macro expands (strlen(wfiles) == 0)
i cannot see problems when run code segmentation fault. had never happened before. when ran code in gdb , without debugging symbols, 1 line pointed if statement earlier mentioned. know why is?
strlen()
dereference pointer, may cause problems when pointer,i.e optarg
, not valid.
for example, in case of optarg=null
, c='f'
, code executed as:
case 'f': wfiles = optarg; //now wfiles=null
strlen(wfiles)
be: strlen(null)
, segmentation fault happens.
see this related question more reference
Comments
Post a Comment