if (tmpFlight->RoutePointIDArray[k]==h_RtPtArrStateArray[kk]->RtPtArrName) 
这是我写的一个判断语句,程序在执行的时候,当k=12;kk=4时莫名其妙的弹出一个无法处理的异常,可能和内存有关,经过检查判断语句下的代码和其属于的循环语句都没有什么问题,那会不会是与我使用的new指针临时对象有关,
在一个函数中有个CArray队列,需要临时添加一个对象,切这对象是一个循环的过程,
for(;;)
{
   new tmob;
   CArray.Add(tmob);
//   delete tmob;
}
每次循环添加的时候我都用new来分配一个新的内存区域,但如果delete的话,添加进去的东西就会为空,如果在循环外面添加new的话,添加进去的元素就会指向同一个内存区域,所以,在这个地方该如何使用new和delete恩?(写得不规范,主要是说明问题),tmob为一个指针类对象。

解决方案 »

  1.   

    你声明的CArray保存的只是指针,如果你删除了对象,当然就空了所有对象最后用完再统一释放
    for(;;)
    {
      tmob = CArray.GetData();
     delete tmob;
    }
      

  2.   

    Unhandled exception in **.exe(MSVCRTD.DLL)0XC0000005 Access Violation!
    就是这个异常
      

  3.   

    没有人知道原因吗?
    for(int l=0;l<index1;l++)
    {
        l_str=tmpFlight->RoutePointIDArray[l];
        ASSERT(l_str!="");
    }///程序执行到此没有错误,表明数组中各个变量都是有值的
    for(int k=1;k<index1;k++)
    {
         ASSERT(tmpFlight->RoutePointIDArray[k]!="");///K=1的时候没有错
         index=h_RtPtArrStateArray.GetSize();
         for(int kk=0;kk<index;kk++)
         {
              ASSERT(h_RtPtArrStateArray[kk]->RtPtArrName!="");  ASSERT(tmpFlight->RoutePointIDArray[k]!="");}///同样,按理在k=1的时候不会错,但就在这个时候报错了!
         }
    }各个真的没有人知道原因吗?
      

  4.   

    for(;;)
    {
        Type *tmob = new Type();
        arr.Add(tmob);
        arr.RemoveAt(arr.GetCount() - 1); //删除Array中的对象
        delete tmob;
    }
      

  5.   

    xing_xing_xing(未名) ( )这个方法行得同吗?CArray没有GetCount()这个函数的!