void func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
这是我遇到的面试问题之一。在main()中,它声明一个int指针,在另一个函数中分配内存并尝试在main()本身中使用。我认为这在某种程度上是错误的,但是这有什么用呢,任何想法?
答案 0 :(得分:2)
ptr
按值传递给funcn
,因此参数ptr
仅获取ptr
中main
的副本。对func
ptr
的任何更改都不会修改main
的{{1}},因此ptr
中的指针ptr
未分配内存。分配给未初始化的指针
main
调用未定义的行为。
可能的解决方案:
使用指向指针的指针:
*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;
}
答案 1 :(得分:1)
void func(int&* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
按引用传递指针,而不是按值传递