【发布时间】:2016-01-29 10:13:10
【问题描述】:
我有以下代码,我想知道它为什么会这样工作:
void addFive(int* a) {
int* b;
b = a;
*b = *b + 5;
}
int main(int argc, char** argv) {
int* nbr;
*nbr = 3;
addFive(nbr);
std::cout << *nbr << std::endl;
return 0;
}
这会产生 8 的输出。
我想知道为什么?指针 int* b 在 addFive 函数末尾超出范围。此外,int* b 不知道int* nbr 的存在(智能指针的一个优点)。我预计代码会在 std::cout << *nbr << std::endl; 行中创建分段错误
为什么这段代码没有给出分段错误?
【问题讨论】:
-
int *nbr; *nbr = 3;您正在访问不属于您的随机内存。该示例具有 UB。 -
未初始化的指针 = 未定义的行为。你也永远不会让
nbr指向任何东西。
标签: c++ pointers scope segmentation-fault