有人å¯ä»¥å¸®åŠ©è¿™ä¸ªç¨‹åºä¸­çš„错误å—?

时间:2014-06-24 13:43:19

标签: c++ pointers

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

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

这是我é‡åˆ°çš„é¢è¯•é—®é¢˜ä¹‹ä¸€ã€‚在main()中,它声明一个int指针,在å¦ä¸€ä¸ªå‡½æ•°ä¸­åˆ†é…内存并å°è¯•åœ¨main()本身中使用。我认为这在æŸç§ç¨‹åº¦ä¸Šæ˜¯é”™è¯¯çš„,但是这有什么用呢,任何想法?

2 个答案:

答案 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;
}

按引用传递指针,而ä¸æ˜¯æŒ‰å€¼ä¼ é€’

相关问题