hur.cn - 华软网

 热门搜索

关于CArray做队列这样是否安全?

  作者:未知    来源:网络    更新时间:2011/1/10
最近做一个程序,用CArray做一个行列,以下:

if(datalist.GetSize()<1024)
{
datalist.Add(data);
}
else
{
datalist.RemoveAt(0,1);
datalist.Add(data);
}

我的想法就是想做一个1024个长度的行列,先进先出,不知道这样用能不能行?如果我想看一下是否会产生溢出危险的话,如何举行调试查看?


原来我的一个同事用CArray的SetAt一个一个移动的


---华软 网友回答---
多线程访问CArray才会出现资源竞争,如果是单线程,只需搞明白索引值不会有危险
---华软网友回复---
单线程的话,没有什么问题啊。
---华软网友回复---
如果是行列的话,为什么不直接用数组,然后*front *rear为首尾指针,最简单的入队出对
---华软网友回复---
现在是这样一个问题,我现在做的是无人值守的数据收集,程序是要一直开着的,所以我对是否存留内存泄漏对照在意!

如果我我一直在前面删掉一个数据,后面追加一个数据的话,我对照担心数据出现内存泄漏的问题


主程序采取消息的方式往数组里面传数据,如果我对数据举行措置惩罚的时候会把数据发送的消息给屏障掉,倒是不会出现资源竞争的问题。

不多说了,等尝试的情况看看再说,帖子不关,明天尝试一天看看情况


---华软网友回复---
引用 3 楼 gudufuyun 的回复:
如果是行列的话,为什么不直接用数组,然后*front *rear为首尾指针,最简单的入队出对


不太敢用指针,总是怕溢出,而且我程序做的太复杂了,其实最好用的照旧stl的queue做行列,又快又不用担心溢出,然则程序原来都是用的Carray,要是改就太麻烦了,就没有搞!
---华软网友回复---
这个对象会出现资源泄露?
---华软网友回复---
我很奇怪呢为什么不用CList而用CArray?array你不停重新删除从尾部增加会有很严重的性能问题,由于没删除一个元素,需要从尾部把所有元素向前拷贝一遍,非常耗时间!我想这是数据结构都应该教的吧?
---华软网友回复---
引用 6 楼 wangbo56916860 的回复:
这个对象会出现资源泄露?


我不知道,横竖程序在运用的进程中稀里糊涂的出现过一次溢出,就在这个地方!不过那时我的同事是这样写的
C++">

if(list.GetSize()<1025)
{
list.Add(data);
}
else
{
    for(int i=0;i<list.GetSize()-1;i++)
   {
     int l=list.GetAt(i+1);
     list.SetAt(i,l);
    }
}
list.SetAt(1023,data);
}


---华软网友回复---
引用 7 楼 arong1234 的回复:
我很奇怪呢为什么不用CList而用CArray?array你不停重新删除从尾部增加会有很严重的性能问题,由于没删除一个元素,需要从尾部把所有元素向前拷贝一遍,非常耗时间!我想这是数据结构都应该教的吧?


我同事的程序是这样用的,我也就随波逐流了,由于程序很小,所以笨一点的方法也就忍了!只需不犯错就行
---华软网友回复---
我想改成CList很简单:)为什么要随着一个毛病的路子走
引用 9 楼 bcc222 的回复:
引用 7 楼 arong1234 的回复:
我很奇怪呢为什么不用CList而用CArray?array你不停重新删除从尾部增加会有很严重的性能问题,由于没删除一个元素,需要从尾部把所有元素向前拷贝一遍,非常耗时间!我想这是数据结构都应该教的吧?


我同事的程序是这样用的,我也就随波逐流了,由于程序很小,所以笨一点的方法也就忍了!只需不犯错就行

---华软网友回复---
if(list.GetSize()<1025)
{
list.Add(data);
}
else
{
    for(int i=0;i<list.GetSize()-1;i++)
   {
     int l=list.GetAt(i+1);
     list.SetAt(i,l);
    }
}
list.SetAt(1023,data); //这里有问题,若list的长度不到1024,就会出现内存溢出               
}

---华软网友回复---
如果CArray当中的数据时new 出来的,那么remove之前要先把这个数据free掉,否则remove后,索引不到被remove掉的数据
---华软网友回复---
你这么用不会有问题的
如果再保险一些的话能够先add后remove
---华软网友回复---
引用 10 楼 arong1234 的回复:
我想改成CList很简单:)为什么要随着一个毛病的路子走

引用 9 楼 bcc222 的回复:
引用 7 楼 arong1234 的回复:
我很奇怪呢为什么不用CList而用CArray?array你不停重新删除从尾部增加会有很严重的性能问题,由于没删除一个元素,需要从尾部把所有元素向前拷贝一遍,非常耗时间!我想这是数据结构都应该教的吧?


我同事的程序是这样用的,我也就随波逐流……

用CList吧
---华软网友回复---
用聊表啊,频繁的插入删除操作的话要比数组快一些
---华软网友回复---
引用 11 楼 redprogramer 的回复:
if(list.GetSize()<1025)
{
list.Add(data);
}
else
{
  for(int i=0;i<list.GetSize()-1;i++)
  {
  int l=list.GetAt(i+1);
  list.SetAt(i,l);
  }
}
list.SetAt(1023,data); //这里有问题,若list的长度不到1024……


前面有if限定了,到这个地方数据一定是大于1025的
---华软网友回复---
经过一天的尝试,没有发现数据有内存泄漏的情况,谢谢大家的支持,后期我再用queue修改一下!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。