我有一个很奇怪的问题,在我的iPhone应用程序是,我认为,与记忆越来越损坏:

在一个点上,我需要数组排序,这是我与-[sortArrayUsingFunction]做。

结果是不正确的,除非我任一方法调用之前分配的东西,如void *test = malloc(2 * sizeof( int ))一些存储器或有,例如,呼叫到NSLog()(这是永远不会调用)在分拣功能。

在换句话说:仅排序,如果我稍微增加这是调用排序功能前用的存储器的工作原理。我想这是因为在某些时候,内存被损坏。

你怎么调试这样呢?

有帮助吗?

解决方案

这听起来似乎有些代码的使用已经发布的对象。很多与调试这种错误的帮助是在苹果的伟大的Mac提供OS X调试魔术的技术说明,尤其是基础一部分。

有关你的情况我会禁用自动释放池(设置环境变量NSEnableAutoreleasePool=NO),或使用僵尸功能(NSZombieEnabled=YES)找到地方,你将消息发送到发布对象。

其他提示

尝试Valgrind的下在模拟器运行程序:

http://valgrind.org/

和如何使用它的模拟器下:

http://landonf.bikemonkey.org/code/iphone/iPhone_Simulator_Valgrind .20081224.html

您可以具有取决于它被安装在那里以改变代码示例Valgrind的路径。

这样的事情可以调试一个挑战。有一些工具用于检测出界外的访问,并这样在其他平台上,所以我相信会有一些为iPhone,但我不知道有什么。

也许你应该存储阵列的两个副本,并加以比较的差异。打印出的差异。这被引入到阵列中的一个“垃圾”的性质,可能给一个提示,它是从哪里来的。

也正好经过这点之前运行的代码,并重新读取它(或更好,但让别人读它)。你可能会看到一个错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top