void func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
这是我遇到的面试问题之一。在main()中,它声明了一个int指针,在另一个函数中分配它的内存并尝试在main()本身中使用。我认为这是错误的,但这项工作还有什么意义呢?通过引用有人可以帮助在这个程序中不正确的?
void func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
这是我遇到的面试问题之一。在main()中,它声明了一个int指针,在另一个函数中分配它的内存并尝试在main()本身中使用。我认为这是错误的,但这项工作还有什么意义呢?通过引用有人可以帮助在这个程序中不正确的?
ptr
被传递到由funcn
值,从而所述参数ptr
只获取的ptr
副本中main
。对func
的ptr
的任何更改都不会修改main
的ptr
,因此存储器未分配给main
中的指针ptr
。分配给未初始化的指针
*ptr = 2;
调用未定义行为。
可能的解决方案:
使用指针的指针:
void func(int** ptr)
{
*ptr = new int;
}
int main()
{
int* ptr;
func(&ptr);
*ptr = 2;
}
从函数返回指针:
int* func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
ptr = func(ptr);
*ptr = 2;
}
使用参考:
void func(int&* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
在指针示例的指针中,'func'的主体应该看起来像'* ptr = new int;'不应该吗? – user888379
@ user888379;接得好! – haccks
在'从函数返回指针'的例子中,func是否应该在分配内存之后返回ptr? – SwappyCplusplus
void func(int&* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
通指针,而不是由值
我认为它应该在函数参数 – user3309301
上使用引用“&”您并未在任何地方删除指针。这是内存泄漏。 另外,别人说,你需要通过referecne(或ptr到ptr)传递指针。 你真的应该初始化所有局部变量('int * ptr;'这里)。 – Zsolt