C ++:指向堆栈动态变量的指针

时间:2014-06-21 20:43:21

标签: c++

我是C ++的新手。我不太明白为什么这段代码不起作用。这段代码与stack-dynamic变量有什么关系?谢谢你的帮助。

int twice(int x)
{
    int *y;
    *y = x * 2;
    return *y;
} 

1 个答案:

答案 0 :(得分:0)

int *y;
*y = x * 2;

不正确,因为y指向现在,而不是指向已分配的内存。这是未定义的行为。在这行代码之后,您的程序完全无法预测,您无法对其行为做任何假设。

您需要首先使用newmalloc分配内存并为其分配x * 2或传递一个地址以指定y,即:

int *y = new int( x * 2);

示例:

int main() {

    int x = 4;
    int *y = new int( x * 2);
    cout << x << "," << *y;
    delete y;

    return 0;
}

旁注:返回指向函数中分配的内存的指针是危险的,因为这可能会变得不清楚谁和何时负责释放已分配的内存。在您的特定情况下,顺便说一下动态分配绝对没有明显的理由。