我是C ++的新手。我不太明白为什么这段代码不起作用。这段代码与stack-dynamic变量有什么关系?谢谢你的帮助。
int twice(int x)
{
int *y;
*y = x * 2;
return *y;
}
答案 0 :(得分:0)
int *y;
*y = x * 2;
不正确,因为y
指向现在,而不是指向已分配的内存。这是未定义的行为。在这行代码之后,您的程序完全无法预测,您无法对其行为做任何假设。
您需要首先使用new
或malloc
分配内存并为其分配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;
}
旁注:返回指向函数中分配的内存的指针是危险的,因为这可能会变得不清楚谁和何时负责释放已分配的内存。在您的特定情况下,顺便说一下动态分配绝对没有明显的理由。