假设您具有以下功能: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在使用完函数后没有在调用函数中使用内存,则会发生内存泄漏。
神不在的星期二
TA贡献1963条经验 获得超6个赞
这不是内存泄漏,因为正在正确释放内存。
但这是一个错误。您有一个指向未分配内存的指针。它称为悬挂参考,是C语言中常见的错误源。结果不确定。尝试使用该指针时,直到运行时您都不会看到任何问题。
- 3 回答
- 0 关注
- 452 浏览
添加回答
举报
0/150
提交
取消