c - 可以覆盖返回的结构吗?
问题描述
我有一个由某个函数返回的结构:
struct Abc {
char *a;
int b;
};
static struct Abc foo() {
struct Abc mystruct;
mystruct.a = "asdf";
mystruct.b = 1;
return mystruct;
}
如果我调用struct Abc new_abc = foo();
,存储在其中的结构是否有可能new_abc
被程序覆盖?
如果我理解正确,mystruct
它是一个范围内本地的自动变量。因此,引用可能会悬空,因此可以被覆盖。
解决方案
如果我调用
struct Abc new_abc = foo();
,存储在其中的结构是否有可能new_abc
被程序覆盖?
是的,new_abc
只是另一个变量。如果程序(mer)希望如此,它可以被覆盖。
如果我理解正确,
mystruct
它是一个范围内本地的自动变量。因此,引用可能会悬空,因此可以被覆盖。
您不是在返回局部变量的地址,而是在返回值。返回结构变量在功能上与返回本地int
or相同char
。这里没有悬空指针。
编辑:
正如评论中所阐明的:
“它是否会被为其他事物分配内存的程序覆盖”
答案是不。您正在返回值并将其存储在变量中。当然,如果你创建了太多的局部变量,你可能会面临堆栈溢出,但是为自动局部变量(用于存储返回值)分配的内存将不会被收回,除非它超出范围。
换句话说,一旦局部变量的值从函数返回并存储在调用者的另一个变量中,函数中的局部变量不再需要存在才能访问调用者中存储的值。
推荐阅读
- java - Sql Developer 在 Mac OS Monterey 上几乎立即崩溃
- javascript - 在 NodeJS 中使用地图
- laravel - Laravel Sai 指向 docker 教程
- javascript - 有条件地使用导入而不使用 import()
- powerbi - 将行更改为列标题 - PowerBI
- javascript - 如何在 React 中映射包含其他对象和数组的整个数组?
- python - Python ValueError 要解包的值很多
- networking - Mosquitto 没有从 conf.d 加载配置文件
- flutter - 了解 Flutter 状态:FlutterSecureStorage 放在哪里?
- json - 如何从单个文件中读取不同的模式 json 对象并将其保存到表中