4 ms·
I think the line above the printf call should be arr[2] = 3; I ran your program and I got 4. Then I changed arr[1] to arr[2] and got 5, as I expected.
by wenderen 12y ago
I think the line above the printf call should be
arr[2] = 3;
I ran your program and I got 4. Then I changed arr[1] to arr[2] and got 5, as I expected.
- Kenji 12y agoIt's only likely, but not certain that a or b get overwritten. How your stack is laid out is entirely up to the compiler. arr[1] is already out of bounds, however, we don't know for certain what's immediately above the array.
- codeflo 12y agoWith compiler optimizations turned on, it's almost guaranteed not to happen, because a and b are very likely to be stored in CPU registers.
- mgraczyk 12y agoOr rather, a and b will be constant folded so that the printf call is optimized to "push #4; push ptrFmt; call printf"
- Someone 12y agoA truly good compiler would replace that printf by a call to putchar or pass a constant string to 'write' (gcc almost (?) does that. See http://www.ciselant.de/projects/gcc_printf/gcc_printf.html http://www.ciselant.de/projects/gcc_printf/gcc_printf.html)
- wyager 12y agoThe compiler is probably aligning all stack elements to 8 bytes.