好吧,我之前已经看到过这种情况,在你有一个带有指针参数并返回指针的函数之前.
但是,您可以选择不传递参数,它将返回一个动态分配的指针,但如果您确实传递了一个指针,那么它只是填充它而不是在堆上创建一个.这是一个没有重载的单一功能.
我的问题是这是如何安全地完成的?
我猜这是这样的:
point* funct(point *p = some_value)
{
if p == some_value
//create a point *p on the heap
else
//create use the given *p and fill it in
return p
}
Run Code Online (Sandbox Code Playgroud)
现在我想不出这是否是正确的方法,如果它是一个什么可能是一个很好的some_value?它不能为NULL,因为当你传递空指针时它也会是NULL并且不确定它是否可以安全地使它大于0.你也不能在指针上有负数,所以什么是安全值?
有什么好方法可以跨平台进行PORTABLE吗?
编辑:
好吧也许我没有正确解释基本上我希望功能像这样使用:
point *x;
point *y;
x = func();
func(y);
Run Code Online (Sandbox Code Playgroud)
不
x = func(NULL);
Run Code Online (Sandbox Code Playgroud)
如果我使用NULL,只有当我执行func(y)时才会出现错误分段错误;
原因是:
用户传递他管理的指针,例如在堆栈上创建的指针,或者如果没有给出,则函数将返回动态指针.我不想强制只返回动态内存或只接受指向填充.
我知道我以前见过这件事.
正常的解决方案是'if NULL allocate' - 这就是'c'realloc的作用.
看起来你想拥有一个使用现有内存的函数(如果提供),或者分配它自己的内存.如果传递有效指针,则不清楚应该返回什么.
它应该返回指针吗?
或者它应该为null以确保没有两个指向同一位内存的指针副本 - 如果它们被释放将导致问题.
将**指针传递给函数并需要参数可能更安全 - 即使该争论是指向null的指针.