/* This code CONTAINS ERRORS and CRASHES when run; why it crashes is part of our class discussion when viewing this code */ #include #include int a[64]; int b[] = {1,2,3,4,5,6}; char c[] = "one"; const char d[] = "two"; const char *e = "nil"; void stackSnoop() { size_t i; size_t *p = &i; for(int i=-8; i<0; i+=1) { printf("%d: %016zx\n", i, p[i]); } } void codeAddresses() { void (*x)() = codeAddresses; stackSnoop(); printf("This function's address: %p\n", x); } int main(int argc, char *argv[]) { printf("a (%p) -- size %zd\n", a, sizeof(a)); printf("b (%p) -- size %zd\n", b, sizeof(b)); printf("c (%p) -- size %zd\n", c, sizeof(c)); printf("d (%p) -- size %zd\n", d, sizeof(d)); printf("e (%p) -- size %zd\n", e, sizeof(e)); codeAddresses(); void (*x)() = codeAddresses; size_t *y = (size_t *)x; printf("y[0] = %016zx\n", y[0]); printf("y[1] = %016zx\n", y[1]); a[0] = -1; printf("a[0] = %d\n", a[0]); b[0] = -1; printf("b[0] = %d\n", b[0]); c[0] = -1; printf("c[0] = %hhd\n", c[0]); ((char *)d)[0] = -1; printf("d[0] = %hhd\n", d[0]); ((char *)e)[0] = -1; printf("e[0] = %hhd\n", e[0]); y[0] = 0; printf("y[0] = %016zx\n", y[0]); free(a); free(e); free(y); return 0; }