Freeing C pointers declared in the middle of a block (seeking documentation on this) -


where behaviour documented (if @ all)?

when declare pointer in c in middle of block, in wrong state (pointing unusable memory) , cannot use standard if (a) free(a) freeing it.

the simplest program comes mind is

#include <stdlib.h> int main(int argc, char *argv[]){     if(argc > 1) goto end;     char *a = null;     = calloc(1,1); end:     if(a) free(a); } 

run program without parameters , works ok, if run @ least 1 parameter, break follows: suprisingly (to me), if compile clang, may work (on os x does, on netbsd not). if gcc, returns a

malloc: *** error object 0x7fff5fc01052: pointer being freed not allocated

notice same program declaration @ head of block correct.

edit: notice question documentation. realize doing describe unsafe have found no place explicitly shown.

the "pattern"

if(a) free(a); 

is not standard, or @ least shouldn't be. it's safe pass null free(), if adds nothing.

i expect value of a undefined (not null) if jump past initialization, makes perfect sense me. hairy code, don't this.

it argued existance of goto , label imply scope isn't implemented, , there's no reason @ free(a); statement after label (outside "invisible" scope a defined).


Comments

Popular posts from this blog

Why does Ruby on Rails generate add a blank line to the end of a file? -

keyboard - Smiles and long press feature in Android -

node.js - Bad Request - node js ajax post -