我是新手。我正在尝试构建一个测验应用程序,而我的应用程序在测验的第一次迭代运行正常,它退出时没有任何控制台错误在第二次运行。修改以下所有代码以供参考。
似乎当我重新运行测验时, - (void)下面的loadNextWord函数确实执行但之后没有任何反应。
请帮忙!
谢谢!
从调试器转储:
我在主func中的第14行是int retVal = UIApplicationMain(argc,argv,nil,nil);
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Program received signal: “EXC_BAD_ACCESS”.
(gdb)
#0 0x025f0907 in objc_msgSend ()
#1 0x05f28da0 in ?? ()
#2 0x023cfc9d in _CFAutoreleasePoolPop ()
#3 0x0001ee67 in -[NSAutoreleasePool release] ()
#4 0x002cfe7f in _UIApplicationHandleEvent ()
#5 0x02d73822 in PurpleEventCallback ()
#6 0x02474ff4 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#7 0x023d5807 in __CFRunLoopDoSource1 ()
#8 0x023d2a93 in __CFRunLoopRun ()
#9 0x023d2350 in CFRunLoopRunSpecific ()
#10 0x023d2271 in CFRunLoopRunInMode ()
#11 0x02d7200c in GSEventRunModal ()
#12 0x02d720d1 in GSEventRun ()
#13 0x002d3af2 in UIApplicationMain ()
#14 0x00002880 in main (argc=1, argv=0xbfffef94) at /Users/vbhardwaj/Documents/ObjectiveC/FinalProject/FunWords/main.m:14
答案 0 :(得分:8)
查看堆栈跟踪,您会看到
行[NSAutoreleasePool release]
这告诉我你已经释放了太多次的对象,例如:
NSString *string = [NSString stringWithString:@"Hello"]; // This string is autoreleased
[string release]; // This line won't crash but is WRONG!
以上代码不会立即崩溃,但字符串将被释放并释放。但是,因为它也是自动释放的,所以自动释放池将尝试在将来的某个时候再次释放它。你不知道什么时候会发生随机的崩溃。
你可能做过类似的事情:)
答案 1 :(得分:0)
问题出在多个版本上。
为了能够正确调试您的代码,甚至包含文件都是必要的。 我可以看到你在代码中发布了wordImageView。 你不应该这样做。 你应该做的是利用属性并做类似
的事情self.wordImageView = nextImageView;
[nextImageView release];
而不是
[wordImageView release]; // release the flagView's memory
wordImageView = nextImageView; // reassign flagView to the new view
您也可以随时使用自动释放池,但这会带来内存惩罚问题。
不过,虽然问题似乎是在主循环中,但它并不存在。这只是清理自动释放池的位置,并且出现问题。在任何情况下,可能都要看一下你的代码并确保所有'alloc'都由同一个选择器中同一个对象的'release'处理。