對於非常簡單的「演示」應用程序,我有一個很奇怪的問題。 基本上問題是,如果我使用單個參數進行類方法調用,並且此方法立即返回,但在返回後定義了變量(請參見下文),那麼調用堆棧會被損壞並且其他變量會被更改...我知道這聽起來很瘋狂,但這裏是代碼...函數調用後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