gpt4 book ai didi

c++ - 类地址与值地址不同?

转载 作者:行者123 更新时间:2023-11-30 01:47:43 28 4
gpt4 key购买 nike

class Test
{
public:
int m_value;
public:
void testA() { printf("A\n"); }
void testB() { printf("B:%d", m_value); }
};

int _tmain(int argc, _TCHAR* argv[])
{
Test* test = NULL;
test->testA();
test->testB();
return 0;
}

为什么这个程序在test->testB()中崩溃,应该是在test->testA()崩溃

最佳答案

在 NULL 指针上调用成员函数会导致未定义的行为。

您的运行时环境正在宽松地处理 NULL 指针。调用 testA() 不会导致任何问题,因为您没有访问任何成员变量。对 testB() 的调用崩溃,因为您在 this 为 NULL 时尝试访问成员变量。

从概念上讲,成员函数映射到具有以下形式的函数:

mangled_testA(Test* this){ ... }

如果您在 NULL 指针上调用此类函数,则调用该函数时会将 this 的值设置为 NULL。如果您不访问任何成员变量,则不会注意到该错误。如果您访问任何成员变量,您会立即注意到错误。

P.S. 语言不保证这种行为。这是经常发生的事情。

关于c++ - 类地址与值地址不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31237550/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com