我是C++(和学习Java)的新手.这是来自HW,但我认为我已经回答了硬件问题,我只是想更好地了解指针.
说我有以下方法:
int cubed(int a) {
int * ptr;
*ptr = a * a * a;
return *ptr;
}
Run Code Online (Sandbox Code Playgroud)
这将编译并正常工作,具体如下:
int test = cubed(3);
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚为什么返回一个解除引用的指针是不好的.
这个问题说内存泄漏是一个问题,但我不确定为什么.也许是因为我不明白解除引用指针会发生什么.
左值是否只是在那个点无限期地挂了?你真的要删除指针吗?任何见解将不胜感激.
你读的问题是不同的.说你有这个代码:
int cubed(int a) {
int* ptr = new int;
*ptr = a * a * a;
return *ptr;
}
Run Code Online (Sandbox Code Playgroud)
现在,你将泄漏动态分配int,因为你将返回它的副本而不是delete原始副本.
你的代码实际上更糟糕了,因为new你只是通过一个未初始化的指针写入不属于你的内存,而不是分配.实际上,你正在写一个int不存在的东西.
你应该做的是这样的:
constexpr int cubed(const int a)
{
return a*a*a;
}
Run Code Online (Sandbox Code Playgroud)
或者只是std::pow(value, 3)在呼叫站点调用.
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |