C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C中的数组及其指针大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
老问题,但我仍然有一些想法.
char * getarrmal(void)
{
    char *str;
    str = (char *)malloc(10);
    str[0] = 'a';
    str[1] = 'b';
    str[2] = 'c';
    str[3] = '\0';
    return str;
}

char * getarrdef(void)
{
    char *str = "hello";
    return str;
}

char * getarrfix(void)
{
    char str[10] = "world";
    return str;
}

三个功能.前两个将返回字符串地址,字符串存储在堆中,以便您可以继续使用它,例如main()函数.

在最后一个函数中,str是一个局部变量,并且不能使用返回的str.

我的问题是,当我返回调用前两个函数时,我应该手动释放它们吗?很容易相信malloc的情况确实如此,但我不确定它是否也是char * str =“hello”的情况.

如果我使用getarrdef()并且不释放它的返回值,那么我会以某种方式泄漏内存吗?

解决方法

不,你绝对不应该试图释放第二个.它不存储在堆中,而是一个字符串文字,并试图释放它是未定义的行为.来自C 11 7.21.3.3自由功能

对于第一个,是的,分配内存的责任与内存本身一起传递是一种很好的做法.这意味着如果有东西分配给你并给你,那么你就有责任释放它.

即使您通过将其传递回像delarrmal()这样的函数来释放它也是如此 – 通过这样做,您已经赋予该函数以释放它的责任.

大佬总结

以上是大佬教程为你收集整理的C中的数组及其指针全部内容,希望文章能够帮你解决C中的数组及其指针所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: