猿问

返回指向自动变量的指针

假设您具有以下功能:


char *getp()

{

    char s[] = "hello";

    return s;

}

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


PS我仍在学习C,所以我的问题可能有点天真...


[更新]

因此,如果说您想返回一个新char[]数组(例如,可能是一个子字符串函数),那么您到底要返回什么?它应该是指向外部变量的指针吗?即char[]不是功能的本地?


aluckdog
浏览 453回答 3
3回答

陪伴而非守候

它不会导致内存泄漏。它将导致悬挂参考。局部变量在堆栈上分配,一旦超出范围将立即释放。结果,函数结束时,您返回的指针不再指向您拥有的内存。这不是内存泄漏(内存泄漏是当您分配一些内存而不释放它时)。[更新]:为了能够返回在函数中分配的数组,您应该将其分配到堆栈之外(例如,在堆中),例如:char *test() {    char* arr = malloc(100);    arr[0] = 'M';    return arr;}现在,如果您free在使用完函数后没有在调用函数中使用内存,则会发生内存泄漏。

神不在的星期二

这不是内存泄漏,因为正在正确释放内存。但这是一个错误。您有一个指向未分配内存的指针。它称为悬挂参考,是C语言中常见的错误源。结果不确定。尝试使用该指针时,直到运行时您都不会看到任何问题。
随时随地看视频慕课网APP
我要回答