gpt4 book ai didi

c - C 中的数组及其指针

转载 作者:太空狗 更新时间:2023-10-29 15:05:58 26 4
gpt4 key购买 nike

老问题了,不过我还是有一些想法。

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 自由函数:

... if the argument does not match a pointer earlier returned by a memory management function, or if the space has been deallocated by a call to free or realloc, the behavior is undefined.

对于第一个,是的,分配内存的责任与内存本身一起传递是一个很好的做法。这意味着如果有东西分配它并将它提供给您,然后负责释放它。

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

关于c - C 中的数组及其指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com