你的nSize太小了,写内存时超界造成内存损坏

解决方案 »

  1.   

    编写程序时,最好不要出现 ptr1  =  ptr2=  new  char[nSize]; 这样的指针赋值语句,好好检查一下。
      

  2.   

    应该这样写
    delete []ptr2;
      

  3.   

    你delete 的是一个 数组指针 所以要加上 [ ] 符号
      

  4.   

    应该这样写 
    delete  []ptr2; 就对了
      

  5.   

    我将delete  ptr2改成 delete  []ptr2,依然出错!
    错误信息是什么意思?
      

  6.   

    你前面是用什么申请的内存;
    你的ptr1,ptr2是不是这样定义的
    char *prt1,*ptr2;
    还是char ptr1[NZISE],ptr2[NSIZE];
      

  7.   

    你调用delete[] ptr2 ;会施放nSize 大小的内存,所以会出错,
    for(int i = 0;i<nsize - strlen(data);i++)
    {char * p = ptr2++;
     delete p;
     
    }
    试试。
      

  8.   

    strncpy不是那么用的。
    你的用法和strcpy有任何区别吗?应该是strncpy(dest,destsize,src);
      

  9.   

    To fz_zhou(vcfan):
    是这样定义的 char  *prt1,*ptr2;
    To mahongxi(烤鸡翅膀)
    我式一下!
      

  10.   

    施放nSize  大小的内存 是什么意思?
      

  11.   

    我觉得"施放nSize    大小的内存"
    是将以ptr为首,nszie大小的内存标为可用区域,这样再NEW时,这一部分可能会被使用。
      

  12.   

    救救我拉,一直以来,想用rational rose ,好不容易下载了一个,却没帐户和密码,用不了,真烦躁,哪位兄弟能帮帮我啊?
      

  13.   

    Kevin_qing说得对,应该是由于访问越界造成的。
      

  14.   

    同意 Kevin_qing() ,在这个函数中strlen(data)>nSize,所以函数strncpy使用指针ptr1访问越界,就是访问了ptr1+nSize+??(打两个问号是因为不知道到底越界多少)的内存,于是,当你删除的时候出错了.
    你可以先比较一下,这样
    ASSERT(nSize>strlen(data));
                                                 liu_feng_fly
      

  15.   

    to xwzqqd
    我正好有一个crack 程序,你把email留下来。to fljfly (冷血)
    呵呵,不好意思在你的问题里写这个,确实找不着他的email。
      

  16.   

    编写程序时,最好不要出现
    1.  ptr1 = ptr2= new char[nSize];  这样的指针赋值语句;
    2.  在用strncpy OR strcpy 之前要检查目标缓冲是否有足够的空间。上面出错是因为越界造成
      

  17.   

    对,把 strlen  换成 nSize 就对了。 至于数组的 delete ,因为是简单类型, 不用 [] 也可以完全释放。
      

  18.   

    ptr! += strlen(data) 是要做什么?
    至于delete时要不要 加 [] 是无所谓的。
      

  19.   

    1。是编译时出的问题吗?
    2.我记得strncpy的原型是:strncpy(char* dest,char* src,int number);
      你先看一下是不是这里的问题。通常编译器报错的地点和你代码出错的地点不一致。
    3。是这样定义的  char    *prt1,*ptr2;所分配的内存大小不够, 在释放整块内存时可能导致越界,
      

  20.   

    NowCan(能量、激情、雨水、彩虹——雷雨云) (  ) :说的对.
      

  21.   

    谢谢大家了,是Kevin_qing说的那样,内存写越界了!!
      

  22.   

    vc的反汇编功能大家应该可以学学,就可以easy解决这些问题了。