- 本帖最后由 walzer 于 2012-6-30 15:22 编辑 *
我查了下2.0.1的代码,应该不会呀。CCArray在构造函数里就先把data初始化为NULL , 然后紧接着调用init, 进而调到initWithCapacity(1), 在最后这个函数里面调用ccArrayNew(capacity) 分配了一块内存给data用。
所以CCArray构造之后,调用count(), capacity()这些函数时,data指针都应该是有效的。
我查了下2.0.1的代码,应该不会呀。CCArray在构造函数里就先把data初始化为NULL , 然后紧接着调用init, 进而调到initWithCapacity(1), 在最后这个函数里面调用ccArrayNew(capacity) 分配了一块内存给data用。
所以CCArray构造之后,调用count(), capacity()这些函数时,data指针都应该是有效的。
你是如何初始化CCArray的。
unsigned int CCArray::count()
{
return data->num;
}
内存错误有可能是data指针没有初始化。
— Begin quote from ____
子龙山人 发表于 2012-6-26 09:56 url
你是如何初始化CCArray的。内存错误有可能是data指针没有初始化。
— End quote
我看api调用的CCArray::array();来初始化的。
我分析也是data没有初始化。
— Begin quote from ____
PollyYeung 发表于 2012-6-26 14:47 url
不会出错啊。我这里都没问题。
实在不行你就得CCMutableArray 的begin() 和 end() 迭代器,判断begin==end …
— End quote
我以前用的就是CCMutableArray 但是2.0取消了。才按照推荐换成了CCArray
— Begin quote from ____
PollyYeung 发表于 2012-6-26 14:53 url
我out了,我还没用过2.0,按理说吧CCArray也应该是容器吧,也按照标准设计的话就应该有开始和结束的迭代 …
— End quote
CCArray貌似木有迭代器。所以我才用count()循环遍历的。
估计是我初始化有问题。
— Begin quote from ____
PollyYeung 发表于 2012-6-26 15:19 url
哎,看了哈CCArray的源码, 也不太清楚是什么问题。好像CCArray有lastObject这个函数获取最后一个,你判 …
— End quote
一样报内存错误,我试验过了。
— Begin quote from ____
LittleDing 发表于 2012-6-26 15:32 url
也许可以试试检查别的地方。
上次遇到和你一样的问题,后来发现是另一个地方的内存操作越界,误写到CCArray …
— End quote
嗯,也是个思路。我排除下去试试。
— Begin quote from ____
PollyYeung 发表于 2012-6-26 16:22 url
那就别用2.0,回归1.0吧。
— End quote
尝鲜下,现在api是2.1的,引擎是2.0有的方法都不一样。。。
还是1.x时代吧。
— Begin quote from ____
PollyYeung 发表于 2012-6-28 14:40 url
我查了找到遍历的方法了
pArray是一个CCArray指针
遍历方法如下
— End quote
thank you 我试试去。
CCArray *aObject = CCArray::array();
aObject->retain(); // This is the key point
…
aObject->addobject(obj);
— Begin quote from ____
stevesz 发表于 2012-6-29 11:48 url
CCArray *aObject = CCArray::array();
aObject->retain(); // This is the key point
— End quote
aObject->retain();这句我加了,只要数组里没东西调用count()一样报内存错误。
retain()方法是保存?什么概念呢?
初始化完立即进行retain 接下来再进行相关的操作 比如 count
retain的动作理论上不应该加才对 不知道2.0有什么变动 或许是一个bug 先这样用吧
— Begin quote from ____
snowcrow0802 发表于 2012-7-2 13:14 url
我加了 retain(); 就可以正常使用了
— End quote
不是吧。。。难道我rp差。。。。。。
我觉得你那个应该是没有retain…
果然是retain的问题。。。。。
CCArray *pArray = CCArray::array();
int size = pArray->count();
CCLog(“size:%d”,size);
这样写没有报错,结果为0