Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is malloc needed for this int pointer example?

The following application works with both the commented out malloced int and when just using an int pointer to point to the local int 'a.' My question is if this is safe to do without malloc because I would think that int 'a' goes out of scope when function 'doit' returns, leaving int *p pointing at nothing. Is the program not seg faulting due to its simplicity or is this perfectly ok?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct ht {
    void *data;
} ht_t;

ht_t * the_t;

void doit(int v)
{
    int a = v;
    //int *p = (int *) malloc (sizeof(int));
    //*p = a;
    int *p = &a;

    the_t->data = (void *)p;
}

int main (int argc, char *argv[])
{
    the_t = (ht_t *) malloc (sizeof(ht_t));
    doit(8);
    printf("%d\n", *(int*)the_t->data);
    doit(4);
    printf("%d\n", *(int*)the_t->data);
}
like image 474
user740521 Avatar asked Feb 10 '26 03:02

user740521


1 Answers

Yes, dereferencing a pointer to a local stack variable after the function is no longer in scope is undefined behavior. You just happen to be unlucky enough that the memory hasn't been overwritten, released back to the OS or turned into a function pointer to a demons-in-nose factory before you try to access it again.

like image 133
IllusiveBrian Avatar answered Feb 15 '26 04:02

IllusiveBrian



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!