C++程序没有返回值却能正常运行

为何这段代码没有返回值程序却能正常运行,且结果符合预期

ListNode* ReverseList(ListNode* pHead)
{
    if (pHead == nullptr)
    {
        return nullptr;
    }

    ListNode* pre = nullptr;
    ListNode* mid = pHead;
    ListNode* last = mid->m_pNext;
    while (mid->m_pNext != nullptr)
    {
        last = mid->m_pNext;
        mid->m_pNext = pre;
        pre = mid;
        mid = last;
    }
    mid->m_pNext = pre;
}

这是调用:

ListNode* pReversedHead = ReverseList(pHead);

我在你的函数后面加了一句,发现返回的就是函数最后一行那个变量的地址。你原来的函数最后一行的变量刚好是反转后的头地址,因此正确。
图片说明

要看你完整的代码,没有return,返回值是随机的,不同编译器不同,如果正好eax寄存器上是head指针,那么就正好能返回(假设一般编译器返回eax寄存器作为返回值)