gpt4 book ai didi

c - 返回指向自动变量的指针

转载 作者:太空狗 更新时间:2023-10-29 16:45:30 25 4
gpt4 key购买 nike

假设您有以下功能:

char *getp()
{
char s[] = "hello";
return s;
}

由于函数返回的是一个指向函数内部局部变量的指针,要在外面使用,会不会造成内存泄漏?

附言我还在学习 C,所以我的问题可能有点幼稚......

[更新]
所以,如果说你想返回一个新的 char[] 数组(即可能是一个子字符串函数),你究竟会返回什么?它应该是指向外部变量的指针吗?即不是函数本地的 char[]

最佳答案

不会造成内存泄漏。它会导致悬空引用。局部变量分配在堆栈上,一旦超出范围就会被释放。结果,当函数结束时,您返回的指针不再指向您拥有的内存。这不是内存泄漏(内存泄漏是指您分配了一些内存但没有释放它)。

[更新]:为了能够返回在函数中分配的数组,您应该在堆栈外(例如在堆中)分配它,例如:

char *test() {
char* arr = malloc(100);
arr[0] = 'M';
return arr;
}

现在,如果您在使用完调用函数后没有释放内存,就会发生内存泄漏。

关于c - 返回指向自动变量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224042/

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