为了账号安全,请及时绑定邮箱和手机立即绑定

返回指向自动变量的指针

返回指向自动变量的指针

C
aluckdog 2019-12-05 15:22:15
假设您具有以下功能:char *getp(){    char s[] = "hello";    return s;}由于该函数将返回指向该函数中要在外部使用的局部变量的指针,是否会导致内存泄漏?PS我仍在学习C,所以我的问题可能有点天真...[更新]因此,如果说您想返回一个新char[]数组(例如,可能是一个子字符串函数),那么您到底要返回什么?它应该是指向外部变量的指针吗?即char[]不是功能的本地?
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

它不会导致内存泄漏。它将导致悬挂参考。局部变量在堆栈上分配,一旦超出范围将立即释放。结果,函数结束时,您返回的指针不再指向您拥有的内存。这不是内存泄漏(内存泄漏是当您分配一些内存而不释放它时)。


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


char *test() {

    char* arr = malloc(100);

    arr[0] = 'M';

    return arr;

}

现在,如果您free在使用完函数后没有在调用函数中使用内存,则会发生内存泄漏。


查看完整回答
反对 回复 2019-12-05
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这不是内存泄漏,因为正在正确释放内存。


但这是一个错误。您有一个指向未分配内存的指针。它称为悬挂参考,是C语言中常见的错误源。结果不确定。尝试使用该指针时,直到运行时您都不会看到任何问题。


查看完整回答
反对 回复 2019-12-05
  • 3 回答
  • 0 关注
  • 452 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信