error: function returns address of local variable

c, return, strcat, strcpy

Solution

The local variables have a lifetime which extends only inside the block in which it is defined. The moment the control goes outside the block in which the local variable is defined, the storage for the variable is no more allocated (not guaranteed). Therefore, using the memory address of the variable outside the lifetime area of the variable will be undefined behaviour.

On the other hand you can do the following.

 char *str_to_ret = malloc (sizeof (char) * required_size);
  .
  .
  .
 return str_to_ret;

And use the `str_to_ret` instead. And when `return`ing `str_to_ret`, the address allocated by `malloc` will be returned. The memory allocated by `malloc` is allocated from the heap, which has a lifetime which spans the entire execution of the program. Therefore, you can access the memory location from any block and any time while the program is running.

Also note that it is a good practice that after you have done with the allocated memory block, `free` it to save from memory leaks. Once you free the memory, you can't access that block again.

Problem

I'm beginner with C and I am learning on my own. I am creating the following function: ``` char *foo(int x){ if(x < 0){ char a[1000]; char b = "blah"; x = x - 1; char *c = foo(x); strcpy(a, b); strcat(a, c); return a; } blah ... } ``` I am basically trying to return an appended string, but I get the following error: "error: function returns address of local variable", any suggestions, how to fix this?

Original source

Related problems