Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c+的内存分配+;当应用程序在安卓设备上运行时,具有new的对象将获得相同的地址 LI> P P> Android应用程序使用C++共享库进行搜索,搜索是通过任务完成的,任务是C++对象,分配如下:_Android_C++_Memory_Allocation - Fatal编程技术网

c+的内存分配+;当应用程序在安卓设备上运行时,具有new的对象将获得相同的地址 LI> P P> Android应用程序使用C++共享库进行搜索,搜索是通过任务完成的,任务是C++对象,分配如下:

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

SearchTaskPtr任务(新的MySearchTask(shared_from_this(),str2Search))

outputlog(“为str2Search=%s分配的搜索任务%p”,task.get(),str2Search.c_str())

队列任务(task)

  • 应用程序运行时的状态是,分配的任务位于同一地址,可以从日志中看到:

    为str2Search=ma分配的搜索任务0x667c80a0

    为str2Search=mat分配的搜索任务0x667c80a0

    为str2Search=math分配的搜索任务0x667c80a0

    为str2Search=mathe分配的搜索任务0x667c80a0

  • 当问题发生时,任务仍在队列中

  • 这里有谁能解释一下,同一个地址是如何为不同的对象创建的

    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,并且当对象超出范围时,您让它指向该对象,那么它将删除该对象。未解除分配的任务,任务将被执行,这取决于许多因素,代码可能在解除分配后使用对象,并且看起来工作成功。您可以尝试在任务对象的析构函数中放入一条日志语句,以确保。如果这不是问题所在,那么我唯一能想到的另一件事是,你以某种方式破坏了堆,它最终相信它可以重用内存。