【发布时间】:2019-02-04 01:39:30
【问题描述】:
我现在正在学习 C++ 中动态变量的概念。我遇到的第一个例子如下。
int *p1 = new int;
std::cin >> *p1;
*p = *p + 5;
std::cout << *p1;
我想知道如果指针 p1 没有指向动态内存位置而是未初始化会发生什么,据我所知,这是未定义的行为。所以,
int *p1;
std::cin >> *p1;
*p1 = *p1 + 7;
std::cout << *p1;
我试过了,但没有用。它让我从控制台输入一个整数,但没有输出任何东西。这是为什么?即使 p1 指向一个随机内存位置,为什么我不能更改它指向的任何值?为什么我需要将 p 分配给“新”内存位置?
【问题讨论】:
-
据我了解,当 p1 未初始化时,它可能实际上指向任何地方。但是,当您创建一个动态变量时,它位于堆中,并且行为更可预测。您永远不应该取消引用未初始化的指针。我仍然想看看其他人对此有何看法。
-
那么,在某些情况下我的第二个代码块会起作用,比如未初始化的变量是否随机指向堆?
标签: c++ pointers dynamic-memory-allocation