struct stTest
{
long num;
char cc; 
};stTest *p=new stTest;
delete p; //在这一行弹出断言失败对话框我知道vc默认设置是结构按8字节对齐,所以p实际占用内存是8字节,
并且后面应该跟着连续4个0xFD,但奇怪的是我调试时并不是这样的,
8个字节后只跟了一个0xFD。如果把设置改为按1字节对齐,上面的代
码没任何问题,p实际占用了5个字节,后面跟着连续4个0xFD。可8字
节对齐为什么就不行呢???是我编译环境设置有问题???

解决方案 »

  1.   

    在c++中,结构体实质上是个退化的类,所以语句
       stTest*p=new stTest();与stTest*p=new stTest;默认情况下是完全一样的!!!
       所以楼上的兄台不要误导
       如果你的语句只是一次运行下出现问题,可能是运行环境的异常,或者你用了枪版的VC++,否则,你要考虑设置问题!
      

  2.   

    rebuild! 不行往下看
    restart vs! 不行往下看
    restart sys!不行往下看
    reinstall vs! 不行往下看
    reinstall sys!不行往下看
      

  3.   

    对,如果正常的话是没有问题的,最起码在我的环境里是没有问题的,我已经试过!第一句执行以后:
    p  0x00c32e20
    num -842150451
    cc  -51delete p;、以后
    - p 0x00c32e20
    num -572662307
    cc -35 '?
      

  4.   

    你是不是设定了unicode了,char ->unicode char ?,瞎猜
      

  5.   

    你可以这样时时,在new了以后,马上delete时时,如果也出错,那就有问题了,如果不出错,你看看在delete之前是不是对p做了越界操作,或者重新new p了??
      

  6.   

    typedef struct stTest STTEST;
    STTEST *p=new STTEST;
    delete p;
      

  7.   

    在我计算机上没有问题,你的那个,有可能是你的编释设置有问题加
    #pragma pack(1)
    struct stTest
    {
    long num;
    char cc; 
    };
    #pragma pack()
    看看
      

  8.   

    不管字节对齐如何设置,这个new和delete都应该不会有问题。最有可能的是你前面的代码有内存越界或者多次释放同一块内存等内存操作错误,这种错误在C/C++中有时候并不一定表现在发生错误的语句附件,而是在其后的某个内存操作上。再在前面的代码中找找错误吧。
      

  9.   

    shootingstars(有容乃大,无欲则刚) 讲得对
    如果按上面的顺序,中间没有语句的话,不可能会出错,有可能的是你其他地方内存越界,再就是vs,system有问题了。