c/c++语言开发共享在实际指针的副本上使用free()是可接受/正确的吗?

这是:

int *a = malloc (sizeof (int) ); int *b = a; free (b); 

与此相同:

 int *a = malloc (sizeof (int) ); free (a); 

如果是,不需要解释,但如果没有,请详细说明原因!

    是的,它们是等价的。

    引用C11 ,章节§7.22.3.3,( 强调我的

    free函数导致ptr指向空间被释放,即可用于进一步分配。 如果ptr是空指针,则不执行任何操作。 否则,如果参数与先前由内存管理函数返回的指针不匹配,或者如果通过调用freerealloc释放了空间,则行为未定义。

    因此,只要您传递之前由malloc()或系列返回的相同ptr值(指针本身或其副本malloc() ,您就可以了。

    x == y时, free(x)free(y)相同的原因与free()函数无关。 这只是因为free()是一个函数。 在C中,任何函数的参数都按值传递。 因此对于任何函数f ,只要y == xf(x)就等于f(y)

    顺便说一句,对于类似函数的宏来说,这不一定是正确的,它可能看起来像函数,但事实上并非如此。 所以,如果你有一个宏,如:

     #define myfunc(x) do_something(&x) 

    然后myfunc(x)几乎肯定会有一个与myfunc(y)不同的结果,即使x == y ,因为真正的函数是do_something() ,并且参数传递给它&x&y 。 即使x等于y&x也不等于&y ,因此传递给函数的参数实际上并不等于值,因此预期函数的行为会有所不同。

      以上就是c/c++开发分享在实际指针的副本上使用free()是可接受/正确的吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/523240.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐