Odpověď na názor

Odpovídáte na názor k článku Koncept nedefinovaného chování v jazyku C3. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.

  • 19. 11. 2025 15:07

    Wasper

    Huh, ten příklad s coredumpem Céčka, co vrací pointer na stack mě zaujal, jak je to možné (však sice tam bude nějaká blbost, ale page pro stack je namapovaná pořád)

    No, tohle mě překvapilo, ono to vrací NULL:

    Dump of assembler code for function foo:
    0x0000000000401126 <+0>: push rbp
    0x0000000000401127 <+1>: mov rbp,rsp
    0x000000000040112a <+4>: mov DWORD PTR [rbp-0x4],0x2a
    0x0000000000401131 <+11>: mov eax,0x0
    0x0000000000401136 <+16>: pop rbp
    0x0000000000401137 <+17>: ret

    malá modifikace už necoredumpuje - zajímavě řešené UB v céčku.

    int* foo()
    {
    int a = 42;
    int *b;
    b = &a;
    return b;
    }
    Dump of assembler code for function foo:
    0x0000000000401126 <+0>: push rbp
    0x0000000000401127 <+1>: mov rbp,rsp
    0x000000000040112a <+4>: mov DWORD PTR [rbp-0xc],0x2a
    0x0000000000401131 <+11>: lea rax,[rbp-0xc]
    0x0000000000401135 <+15>: mov QWORD PTR [rbp-0x8],rax
    0x0000000000401139 <+19>: mov rax,QWORD PTR [rbp-0x8]
    0x000000000040113d <+23>: pop rbp
    0x000000000040113e <+24>: ret
    End of assembler dump.

    (překládáno s -O0)