typedef struct
    {
long x;
long y;
    } TASKS1;TASKS1 *myTask=new TASKS1[100];
TASKS1 *mytem=myTask;for (i=0;i<100;i++)
{
mytem[i].x=i;
mytem[i].y=99-i;
mytem++;
};
delete [] myTask;    //删除数组时出错,要是将i<100改为i<50没问题,连51都不行,真不知道怎么搞的。

解决方案 »

  1.   

    你的循环中的 mytem++;是什么意思?
    在这个循环中,不应该有这条命令。如果有这条命令,指针早已越界,结果为不可知。
      

  2.   

    哦,我知道拉,多NEW一个就可以了,奇怪
      

  3.   

    看来你没有理解!!!为何要多一个new,是不是给mytem也分配内存?
      

  4.   

    跟踪 一下你的程序,在循环内设置断点,并间步跟踪看看!你就会发现问题!你想守成什么呢? 每次mytem别指针指向下一个记录? 那么为什么又要用下标 i 呢?举例子说,你的程序在开始运行前,用NEW分配了100*4*2 = 800 BYTE的空间,并将myTask,mytem指向了这块内存的起点处(a) ;在循环中,
    当i=0时,mytem指向a,修改a处的数据! 
    当i=1时,mytem指向(a+8),修改(a+8)+8*i处的数据!(因为mytem++)
    ...当i=50时,mytem指向(a+8*50),mytem[50]指向a+8*50+8*50,此时修改数据就会出现越界!
     
      

  5.   

    typedef struct
        {
    long x;
    long y;
        } TASKS1;TASKS1 *myTask=new TASKS1[100];
    for (i=0;i<100;i++)
    {
    myTask[i].x=i;
    myTask[i].y=99-i;
    };
    delete [] myTask
    正确的改变,谢谢大家