【发布时间】:2014-04-11 15:40:45
【问题描述】:
所以这个特殊的 libspotify 错误让我有点难过。我的应用程序基本上会加载用户播放列表,并允许用户进入这些播放列表,此时它会填充曲目数据。
所以问题出在函数上:
sp_image* image = sp_image_create(session, image_id);
(调用后) const byte* image_id = sp_album_cover(专辑, SP_IMAGE_SIZE_SMALL);
现在这在某些时候可以正常工作,但经常会弹出“传递给 dlfree() 的损坏内存,SIGSEGV”错误,这会导致。所以我首先寻找的是内存错误,但有大量可用内存,并且发生这种情况时没有空指针。调用从库发生到 libc.so,因此它比我可以访问的库更深入。
这显然与内存有关,但奇怪的是它可能在加载 10 首曲目或 400 首曲目之后发生,但从我的测试设备来看,它只发生在 Nexus 4 和 Nexus 7 上,而不是 Galaxy S3,或者HTC的感觉。首先想到的是 N4 和 N7 是高通设备,但这就是我必须继续说的,可能与任何事情无关!
非常感谢任何帮助!
【问题讨论】:
-
准确地说,错误是:04-11 16:46:20.957: A/libc(4599): 无效地址或损坏块地址 0x6a031770 传递给 dlfree 04-11 16:46:20.957 : A/libc(4599): 0xdeadbaad (code=1) 处的致命信号 11 (SIGSEGV),线程 4631(网络线程)
-
这没什么好说的,但我猜它可能是释放后使用或线程错误。检查您是否拥有正确数量的 add_refs 和 release,并且您永远不会在不同的线程上同时调用 spotify 函数。
-
是的,我在参考发布方面掌握得很好,所以我知道我很好。我只从一个线程中调用 spotify 函数,所以我对此也很有信心。有点没主意了!我唯一发现的是 sp_image_data(image, &size); 产生的 size 变量。在它崩溃之前是巨大的,我认为在库中它试图释放无意义的内存,我无法阻止它。然而,这只是在黑暗中拍摄。
标签: spotify libspotify