c+的内存分配+;当应用程序在安卓设备上运行时,具有new的对象将获得相同的地址 LI> P P> Android应用程序使用C++共享库进行搜索,搜索是通过任务完成的,任务是C++对象,分配如下:
SearchTaskPtr任务(新的MySearchTask(shared_from_this(),str2Search)) outputlog(“为str2Search=%s分配的搜索任务%p”,task.get(),str2Search.c_str()) 队列任务(task)c+的内存分配+;当应用程序在安卓设备上运行时,具有new的对象将获得相同的地址 LI> P P> Android应用程序使用C++共享库进行搜索,搜索是通过任务完成的,任务是C++对象,分配如下:,android,c++,memory,allocation,Android,C++,Memory,Allocation,SearchTaskPtr任务(新的MySearchTask(shared_from_this(),str2Search)) outputlog(“为str2Search=%s分配的搜索任务%p”,task.get(),str2Search.c_str()) 队列任务(task) 应用程序运行时的状态是,分配的任务位于同一地址,可以从日志中看到: 为str2Search=ma分配的搜索任务0x667c80a0 为str2Search=mat分配的搜索任务0x667c80a0 为str2Searc
Device-info:
OS Version: 3.0.31-310959(N7100XXALJ3)
Android: 4.1.1
OS API Level: 16
Device: t03g
Model (and Product): GT-N7100 (t03gxx)
Manufacture: samsung
Display: JRO03C.N7100XXALJ3
Brand: samsung
看起来您正在构造函数中传递指向此对象的共享\u指针,因此一旦任务对象超出范围,堆内存就会被释放以供重用,因为我认为该对象没有任何其他共享指针共享引用。完整的代码会更好 有我们可以看的代码吗?否则我个人会猜测它为什么给出相同的地址。代码在上面的#1和#2之间。谢谢。正在这些日志行之间释放任务吗?没有看到SearchTaskPtr和queueTask的定义,我只能猜测。但是,如果SearchTaskPtr类似于一个唯一的_ptr,并且当对象超出范围时,您让它指向该对象,那么它将删除该对象。未解除分配的任务,任务将被执行,这取决于许多因素,代码可能在解除分配后使用对象,并且看起来工作成功。您可以尝试在任务对象的析构函数中放入一条日志语句,以确保。如果这不是问题所在,那么我唯一能想到的另一件事是,你以某种方式破坏了堆,它最终相信它可以重用内存。