我有这样在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
这样做。
但是当我在主做var = new some_type
,我手工克隆(的var2
每个数据复制到var
)在some_func
,我不明白的错误。
我的问题在哪里?我不是真的习惯于指针和内存分配的东西,但我认为这两种方式应该工作。我错了吗?
也许主要的问题是当我在函数中使用new
分配一个指针,然后将其地址保存在一个指针参数中时,函数完成时是否释放内存?
如果发布整个代码会更好。 –
这需要我很多。我的代码现在可以工作,但正如我所说,不是我在问题中写的方式。也许主要问题是当我在函数中使用'new'分配一个指针,然后在指针参数中保存它的地址时,函数完成时内存是否被释放? – vfsoraki
@edwinc的答案是正确的。 'some_type * var'表示'var'是一个指向'some_type'的指针,它由调用者提供。当你在你的函数中声明'var = ...'时,你只是改变'var'的本地副本,导致它忘记了调用者设置它指向什么,如果有的话。 '''确保'var'确实是调用者的实际变量,而不是本地副本,所以当你分配给'var'时,你正在分配给调用者的变量。 –