gpt4 book ai didi

C++ 堆栈与堆和指针

转载 作者:行者123 更新时间:2023-11-30 05:43:25 31 4
gpt4 key购买 nike

<分区>

所以我正在学习 C++(来自 Java 背景)。我以为我了解内存如何在高层次上工作(堆栈与堆和指针)。为了进行实验,我编写了以下两个玩具函数:

 int* pntrToHeap(int val) {
return new int(val);
}

 int* pntrToStack(int val) {
return &val;
}

起初我以为 pntrToStack 不会工作,因为局部变量 val 在函数退出后被“删除”的堆栈上。但是在以下代码没有错误地运行之后(但是有 1 个警告),我重新考虑了:

 int main()
{
int val1 = *pntrToHeap(3);
int val2 = *pntrToStack(4);
cout << val1 << endl;
cout << val2 << endl;
return 0;
}

3 和 4 都打印到屏幕上。似乎堆栈实际上并没有被删除,但 CPU 只是失去了访问其上局部变量的能力——这是正确的吗?如果是这样,在这种情况下,我们应该更喜欢哪个功能?

最后,由于 val1 是 main 的局部变量,pntToHeap 是否会造成内存泄漏,因为我无法删除它在堆上创建的值?

我知道以前有人问过这些概念,但我找不到答案。谢谢!

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com