我所理解的是这不应该这样做,但是我相信我见过这样的例子(注意代码在语法上不一定是正确的,但是 idea 是存在的)

typedef struct{
    int a,b;
}mystruct;

然后是一个函数

mystruct func(int c, int d){
    mystruct retval;
    retval.a = c;
    retval.b = d;
    return retval;
}

我知道如果我们想要做这样的事情,我们应该总是返回一个指向恶意锁定 struct 的指针,但是我肯定我看到过这样的例子.这是对的吗?就我个人而言,我总是返回指向错误锁定的 struct 的指针,或者只是通过引用传递函数并修改那里的值.(因为我的理解是,一旦函数的作用域结束,任何用于分配 struct 的堆栈都可以被覆盖).

让我们为这个问题添加第二个部分:这是否因编译器而异?如果是,那么最新版本的桌面编译器:gcc、g++和Visual Studio的行为是什么?

对这件事有什么 idea ?

推荐答案

这是完全安全的,这样做没有错.另外:它不会因编译器而异.

通常,当(像你的例子一样)你的 struct 不是太大时,我认为这种方法甚至比返回malloc’ed struct 更好(malloc是一个昂贵的操作).

C++相关问答推荐

在Windows上构建无聊的SSL x64

Malloc(sizeof(char[Length]))是否不正确?

如何将字符串argv[]赋给C中的整型数组?

C语言中的strstr问题

Clang警告称,`ffi_type`与`sizeof`不兼容

struct -未知大小

对重叠字符串使用MemMove

为什么此共享库没有预期的依赖项?

为什么电路板被循环删除?

为什么Linux无法映射这个PT_LOAD ELF段?

我正在try 将QSORT算法实现为C++中的泛型函数

通过对一个大的Malloc内存进行切片来使用Malloc的内存片

问题:C#Define上的初始值设定项元素不是常量

如何在C中处理流水线中的a、n命令?

从Raku nativecall调用时精度不同

WSASocket在哪里定义?

C 和 C++ 标准如何告诉您如何处理它们未涵盖的情况?

如何正确探测平台设备?

设置具有非零终止字符串的大整数

米斯拉映射到 klocwork 违规行为