char *pBuf = new char[100];
A* p = (A*)pBuf;
..............
DeviceIOControl(..,p,);
对p进行操作.
..............
delete pBuf;   //非法(有时候)上面是一个函数,多次调用,在调用几次之后在上面出现非法.

解决方案 »

  1.   

    这样删除
    delete []pBuf;
    你删除的是一个数组对象,不是单个对象
      

  2.   

    楼上说的对,应该这样
    delete [] pBuf;
    这才是释放分配的数组
      

  3.   

    楼上说的对
    释放数组前面是要加[],因为数组是在栈中创建的,他的分配不包含自由存储机构信息,所以随后的delete调用可能产生无法预料的结果。
      

  4.   

    delete pBuf;不会非法
    一般是内存越界或指针无效
      

  5.   

    在debug模式下,越界的时候delete会非法操作,但是release模式下不会。
    因为debug模式下分配内存的时候会多分配4个字节,这4个字节内容是0xFE,delete的时候会检查这4个字节,看是否越界。
      

  6.   

    在VC中new一个数组是可以直接使用delete来释放的,可以不用delete[],尽管这种习惯不好,但是它在VC中不会造成非法
      

  7.   

    肯定越界了
    检查下标
    0-99如果多次调用最好用之前先memset一下
      

  8.   

    看错了,是函数啊
    那就不用memset了
      

  9.   

    new 对应 delete;
    new xxx[] 对应 delete[] xxx;
      

  10.   

    new 对应 delete;
    new xxx[] 对应 delete[] xxx;
      

  11.   

    回复人: idAnts(你才无聊呢) ( ) 信誉:110  2005-7-4 9:36:02  得分: 0  
    在debug模式下,越界的时候delete会非法操作,但是release模式下不会。
    因为debug模式下分配内存的时候会多分配4个字节,这4个字节内容是0xFE,delete的时候会检查这4个字节,看是否越界。------------
    说反了吧????