C++ 有人能帮助解决这个程序中的错误吗?
这是我面临的面试问题之一。在main()中,它声明一个int指针,在另一个函数中分配内存,并尝试在main()本身中使用它。我认为这在某种程度上是错误的,但这又该如何发挥作用呢C++ 有人能帮助解决这个程序中的错误吗?,c++,pointers,C++,Pointers,这是我面临的面试问题之一。在main()中,它声明一个int指针,在另一个函数中分配内存,并尝试在main()本身中使用它。我认为这在某种程度上是错误的,但这又该如何发挥作用呢 void func(int* ptr) { ptr = new int; } int main() { int* ptr; func(ptr); *ptr = 2; } 通过引用而不是通过值传递指针ptr通过值传递给funcn,因此参数ptr仅获取main中的ptr副本。对func
void func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
通过引用而不是通过值传递指针
ptr
通过值传递给funcn
,因此参数ptr
仅获取main
中的ptr
副本。对func
的ptr
的任何更改都不会修改main
的ptr
,因此不会为main
中的指针ptr
分配内存。未初始化指针的赋值
void func(int&* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
调用未定义的行为
可能的解决办法:
使用指向指针的指针:
*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;
}
int* func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
ptr = func(ptr);
*ptr = 2;
}
我认为它应该在funct参数上使用reference“&”,而不是在任何地方删除指针。这是内存泄漏。另外,正如其他人所说,您需要通过referecne(或ptr到ptr)传递指针。您确实也应该初始化所有局部变量(
int*ptr;
),在指针指针示例中,func
的主体应该类似于“*ptr=new int;”不应该吗?@user888379;抢手货在“从函数返回指针”示例中,func是否应在分配内存后返回ptr?@swapycplusplus;对你需要先分配它。