C中的数组及其指针
老问题,但我仍然有一些想法.
char * getarrmal(void) { char *str; str = (char *)malloc(10); str[0] = 'a'; str[1] = 'b'; str[2] = 'c'; str[3] = ' '; 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()这样的函数来释放它也是如此 – 通过这样做,您已经赋予该函数以释放它的责任. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |