我用的是VC++6.0
在写一个函数时用以下代码:
char *p=NULL;
p = new char[64];
memset(p,0,64);
strcpy(p,"");
.........
.......
strcpy(p,"lasfjlsdj");
delete [] p;在用单步执行执行到这里时报错为“unhandled exception in test.exee:0xc0000005:Access Violation"在Debug版本运行就报:”0x00459a3d指令引用“xdddddde1"内在。该内存不能为”written"
这是什么原因造成的!把delete[] p去了后就没问题

解决方案 »

  1.   

    代码没问题,是不是在delete [] p;之前有释放的操作.
    实在不行就
    if (p!=NULL) delete[] p;
      

  2.   

    在Release版下运行就没什么问题!在Debug下:
    在没有
    memset(p,0,64);  
    strcpy(p,"");  
    .........  
    运行时报的是DebugError有时候,什么Damage:after normal block (#326171)at 0x01491700
      

  3.   

    我把if( p!=NULL)
        {
    delete [] p;//这里还是出现 unhandled exception in  Test.exe:0xc0000005:AccessViolation
    p == NULL;
    }
      

  4.   

    我把if( p!=NULL)
        {
    delete [] p;//这里还是出现 unhandled exception in  Test.exe:0xc0000005:AccessViolation
    p == NULL;
    }
      

  5.   

    你在delete操作之前单步跟踪一下,看看前面有没有释放操作。
      

  6.   

    楼主试一下新建一个cpp文件,写入如下代码
    #include <string.h>
    void main()
    {
    char *p=NULL;
    p = new char[64];
    memset(p,0,64);
    strcpy(p,"");
    strcpy(p,"lasfjlsdj");
    delete [] p;
    }
    没有错误啊。
    原因肯定在你的
    .........
    .......
    里面。