2014-06-24 34 views
1
void func(int* ptr) 
{ 
    ptr = new int; 
} 

int main() 
{ 
    int* ptr; 
    func(ptr); 
    *ptr = 2; 
} 

这是我遇到的面试问题之一。在main()中,它声明了一个int指针,在另一个函数中分配它的内存并尝试在main()本身中使用。我认为这是错误的,但这项工作还有什么意义呢?通过引用有人可以帮助在这个程序中不正确的?

+0

我认为它应该在函数参数 – user3309301

+0

上使用引用“&”您并未在任何地方删除指针。这是内存泄漏。 另外,别人说,你需要通过referecne(或ptr到ptr)传递指针。 你真的应该初始化所有局部变量('int * ptr;'这里)。 – Zsolt

回答

2

ptr被传递到由funcn值,从而所述参数ptr只获取的ptr副本中main。对funcptr的任何更改都不会修改mainptr,因此存储器未分配给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; 
} 
+0

在指针示例的指针中,'func'的主体应该看起来像'* ptr = new int;'不应该吗? – user888379

+0

@ user888379;接得好! – haccks

+0

在'从函数返回指针'的例子中,func是否应该在分配内存之后返回ptr? – SwappyCplusplus

1
void func(int&* ptr) 
{ 
    ptr = new int; 
} 

int main() 
{ 
    int* ptr; 
    func(ptr); 
    *ptr = 2; 
} 

通指针,而不是由值

相关问题