繁体   English   中英

关于C ++中的指针

[英]regarding pointers in c++

我有这样的功能

void some_func(some_type *var)
{
    // do something a get a var2 of type some_type*
    var = var2;
}

我主要是

some_type *var;
some_func(var);
print_var(var);

但是我在运行程序时遇到了分段错误。 调试显示出print_var是问题,就像var没有值一样。 var2使用new some_type初始化,所以我认为我不需要为var执行此操作。

但是当我在main中执行var = new some_type并在some_func手动克隆(将var2每个数据复制到var )时,我没有收到错误。

我的问题在哪里? 我不是很习惯于指针和内存分配的事情,但是我认为这两种方法都应该起作用。 我错了吗?

可能的主要问题是,当我在函数中使用new分配一个指针,然后将其地址保存在指针的参数中时,函数完成后是否会释放内存?

您需要将定义更改为:

    void some_func(some_type*& var)
    {
        // var will also be changed on the caller side
        var = var2; 
    }

注意,它传递了对指针的引用,因此被调用者可以更新指针的值。

您在main() someType *varmain()局部变量,而函数中的*var是该函数的局部变量。

因此,函数中的var指向var2而不是main中存在的那个。

您正在按值传递var 这意味着在堆栈上制作了一个var副本,与main中的var分开。 然后使用var2初始化此副本。 但是,当some_func退出时,将弹出堆栈,并且副本将丢失。 main中声明的var保持不变。

要解决此问题,一种可能的方法是让some_func返回一个指针值,然后可以将其分配给var

或者,将您的some_func声明更改为

void some_func(some_type *& var)

这通过var参考,这意味着,所有你关心的varsome_func是一样的varmain

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM