对于非常简单的“演示”应用程序,我有一个很奇怪的问题。 基本上问题是,如果我使用单个参数进行类方法调用,并且此方法立即返回,但在返回后定义了变量(请参见下文),那么调用堆栈会被损坏并且其他变量会被更改...我知道这听起来很疯狂,但这里是代码...函数调用后XCode 3.2.6堆栈损坏
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
NSError *er=[MLRESTRequest test:nil]; //<- this line modifies the "application" variable passed as first argument!
return YES;
}
@implementation MLRESTRequest
+ (NSError*) test:(id)task
{
return nil;
NSURLResponse *responseHeaders=nil;
NSDictionary *responseHeadersDict=nil;
NSError *error=nil;
NSData *result=nil;
NSURL *urlToCall = nil;
NSMutableURLRequest *urlRequest=nil;
NSString *serverRequest=nil;
NSString *cookie=nil;
NSString *server=nil;
NSString *port=nil;
NSString *call=nil;
//return nil;
}
@end
如果我提出在“测试”的方法结束返回那么一切都OK ...
编辑:我张贴的图片评论问题
编辑2:我重新映像了mac并安装了新的xCode 3.2.6副本 - 问题消失了。可悲的是,几天后我开始出现类似的问题......(从函数调用返回后,堆栈变量没有任何原因被改变)......我在3.2.5和4.0上重新编译了完全相同的代码,问题又一次消失了。 。我不知道该怎么做,但现在将远离3.2.6
编辑3:如果有人仍然对这种情况感兴趣 - 我已经证明3.2.6中使用的GCC 4.2是越野车 - 如果使用LLVM + GCC 4.2,则不会发生崩溃
return语句后代码的用途是什么?它是否达到过? – Codo
无目的 - 此代码仅适用于“演示” - 我遇到了非常复杂的项目问题,并缩小了解决此问题的难题......即,在返回后有一个变量定义...如果我删除了变量或者在它们之后移动它的返回值 - 其正确... – Sunman
什么版本的XCode和您使用的编译器?最近,我看到一些可以追溯到编译器生成无效代码的问题 - 尽管目前为止它只影响了发布模式。 – Codo