Steve Litt <sl...@troubleshooters.com> writes:
> On Mon, 28 Mar 2016 13:57:08 -0300
> Emiliano Marini <emilianomarin...@gmail.com> wrote:
>
>> char *p;
>> p="01234";  /* skeezy, but makes the point */
>> 
>> Warning! Here "p" is pointing to nowhere, you don't know which memory
>> locations are writing to.
>
> Yeah, that's why I said "skeezy". But on some of compilers, you can
> actually strcpy(p, "43210") and you will neither get a compile time
> error nor a runtime one, because when p is in scope, it points to 6
> bytes *somewhere*, even if on the stack.

That's not necessarily true. Eg, on a 64-bit Intel machine using gcc
4.7.2, this program

--------
static long long *llp(void)
{
    long long x;

    x = -2;
    return &x;
}

static void *ouch(void)
{
    char *p;

    *p = 3;
    return &p;
}

int main(void)
{
    llp();
    ouch();

    return 0;
}
--------

will segfault because the pointer gets the value assigned to the long
long used earlier.

    
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to