返回指向自动变量的指针

前端之家收集整理的这篇文章主要介绍了返回指向自动变量的指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说你有以下功能
char *getp()
{
    char s[] = "hello";
    return s;
}

由于函数在外部函数中返回一个指向局部变量的指针,是否会导致内存泄漏?

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

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

解决方法

它不会导致内存泄漏.这将引起悬而未决的引用.局部变量分配在堆栈上,一旦超出范围就会被释放.因此,当函数结束时,您返回的指针不再指向您拥有的内存.这不是内存泄漏(内存泄漏是当你分配一些内存,不要释放它).

[更新]:
为了能够返回一个函数中分配的数组,你应该把它分配给堆栈(例如堆),如:

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

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

猜你在找的C&C++相关文章