.mm文件如果在Xcode 7上构建,但在Xcode 8上不起作用



我正在调用来自第三方开发人员的C库库中的函数,我无法泄露该功能。问题在于,当使用Xcode 8构建应用程序时,该功能会返回错误,但是使用Xcode 7时可以正常运行。我正在从我的应用程序中的.mm文件调用库函数。我知道这有可能是由第三方库引起的,但是Xcode版本中可能会影响这一点的变化是什么?我不知道从哪里开始,也不能在这里粘贴代码。

我为此找到了解决方法,但仍然不知道为什么会这样。我发现该错误的原因是Optimization Level。在Xcode 8中,我需要设置优化级别以使其工作,否则它会失败。

失败的特定源代码是:

char subject[256];
memset(&subject, 0x00, sizeof(subject));
strcpy(subject, "Test");
mail.emailSubject = subject

我用以下代码替换了上述代码:

mail.emailSubject = (char*)"Test";

如果有人可以解释,请自由。谢谢!

代码的第一个块是分配堆栈char数组,然后将其分配给我不知道哪种对象类型的电子邮件。如果它不复制堆栈内存,而只是将其分配,那么当函数返回堆栈内存时,将被划分并将电子邮件设备保留脏内存。

分配"测试"时,编译器将把"测试"分配为静态变量,在函数返回后未进行处理。

希望它有帮助。

相关内容

最新更新