函数体中有代码 
        int num;
unsigned char* buf1=NULL;
for(i=0;i<length;i++)

{
preChar=p1[i].preChar;                                       //第一字节存放原字符
uBitLength=p1[i].bit.GetLength();                            //第二字节存放位长
num=uBitLength%8?uBitLength/8+1:uBitLength/8;                //其后存放编码
buf1=new unsigned char[num];
for(int j=0;j<num;j++)
buf1[j]=p1[i].bit.GetVector(j);

file.write(&preChar,1);
file.write((char*)&uBitLength,1);
file.write((char*)buf1,num);
delete []buf1;
}
为什么运行到buf1=new unsigned char[num];
提示异常内存    位置处的std::bad_alloc
内存也就用了3M多

解决方案 »

  1.   

    for(i=0;i<length;i++)
    preChar=p1[i].preChar; //第一字节存放原字符
    uBitLength=p1[i].bit.GetLength(); //第二字节存放位长
    num=uBitLength%8?uBitLength/8+1:uBitLength/8; //其后存放编码楼主
    length 有多长不知道
    p1 里面放什么东西不知道.
    num 每次有多大也不知道,很难帮楼主DEBUG的喔.
      

  2.   

    num值有问题。楼主调试一下。靠大家猜是非常费时间的。
      

  3.   

    num=uBitLength%8?uBitLength/8+1:uBitLength/8; //其后存放编码
    先看看值。。
      

  4.   

    num=uBitLength%8?uBitLength/8+1:uBitLength/8;
    这个会是1?取出8的整数倍数的长度
    先一步步把自己想要做的要求分析清楚 这样会比较容易找出问题
      

  5.   


    你确定你的 length num的值了吗? 是否正常?先debug这个地方看看
      

  6.   

    同学  你把delete []buf1 放到 for 循环 外试试 !
    c++ 有 半年没碰了  忘了delete 是 删除 栈和堆之间的链接  还是 直接把栈(即指针)删了  
    如果是直接删了   那么就会出现bad_alloc 即 错误分配空间