为什么第一个值为2814,但在删除代码块后却没有?

时间:2015-09-08 17:41:03

标签: c++ visual-studio visual-studio-2015

所以我有一个变量value4,我将其赋值为14,但它表示它的值实际上是2814 ... 但每当我删除一段代码时(我用注释标记它) “从这里开始”和“在这里结束”),这一切都恢复正常。我想知道,导致它的原因是什么?为什么会这样 - 当然,我是如何解决的?

Here's the function:
void incByOne(int &ref) {
    ++ref;
}

以下是代码:

// *starts here*
int *ptr = new int; // dynamically allocate an integer
*ptr = 28; // put a value in that memory location

if (!ptr) {
    std::cout << "Could not allocate memory.";
    exit(1);
}

std::cout << *ptr;
delete ptr;
// *ends here*

ptr = 0;

int value4 = 14;
int &ref = value4;
ref = value4;
std::cout << value4 << std::endl;
ref = 99;
std::cout << value4 << std::endl;
incByOne(value4);
std::cout << value4 << std::endl;

2 个答案:

答案 0 :(得分:4)

你从行

获得28
std::cout << *ptr;

然后,您从第一行获得14

std::cout << value4 << std::endl;

由于在输出28的行之后没有打印空格或换行符,因此输出为2814

答案 1 :(得分:0)

当您打印值ptr时,它会打印28,但您在第一次打印value4之前不会插入换行符。

这意味着您正在打印

2814

28 - *ptr

的值

14 - value4

的值

打印std::endl后插入std::cout << *ptr;,格式应正确。