我有一个C函数(在我的Objective-C库中,在Xcode中构建),如下所示:
static uint32_t somelen() {
char out[4];
bzero(out, 4);
// ... Work out contents of bytes 0-3.
return *(uint32_t *)out
}
在调试模式下工作正常,但是在为发布而构建时,返回值有时完全不稳定。我现在,我意识到在堆栈上创建了out
,因此在函数退出时会被清除。但我确实认为,在return语句中,我正在对值进行derefencing并返回字节的副本。但显然不是。我可以通过使函数成为静态变量来使函数正常运行:
static char out[4];
但这看起来很傻。我只需要在此函数的持续时间和调用它的函数中使用该数据。返回一个值,调用函数可以存储在任何地方,这对我来说很有意义。我如何做到这一点?