Machine-translated by Google. Questions are authored in English.
Top

Discussion

What is the output of this C code?

#include <stdio.h>
    int main()
    {
        int i = 10;
        int *p = &i;
        foo(&p);
        printf("%d ", *p);
        printf("%d ", *p);
    }
    void foo(int **const p)
    {
        int j = 11;
        *p = &j;
        printf("%d ", **p);
    }

 

  • A.11 11 11
  • B.11 11 Undefined-value
  • C.Compile time error
  • D.Segmentation fault/code-crash

Answer: B

Correct answer: 11 11 Undefined-value

int **const p makes p itself constant while leaving *p modifiable, so *p = &j is legal and foo prints 11.

But j dies when foo returns, so the caller's pointer dangles. The first printf in main often still finds 11, because nothing has yet overwritten that stack slot - but the call itself uses the stack, so the second read may find anything. Every read after the return is undefined; only the timing makes the first appear to work.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.