我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 一个关于内存空间的问题 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

lxlcn



性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
发贴: 1310
威望: 0
浮云: 1741
在线等级:
注册时间: 2005-10-06
最后登陆: 2011-06-29

5come5帮你背单词 [ year /jə:, jiə/ n. 年,一年,年度,学年;a. 每年的,一年一次的;ad. 每年,一年一度的 ]


一个关于内存空间的问题

今天帮个同学改个东西..突然出现个问题,求达人指点下..
    附件里边的关键代码如下:
Copy code
//就是按下OK按钮发生的事件
//分配一个空间->将一段字符串复制进去->计算检验和->释放空间
void CAddressQDlg::OnOK()
{

    //char *buff=new char[strlen("AT+SSCAN,*")+5];
    char *buff=new char[63];//我的机器上少于63就会报错 
    if(!buff) return;
    strcpy(buff,"AT+SSCAN,*");
    checkSum(buff,strlen(buff)+1);
                      //sendDataFunction(buff,strle(buff+1));
    delete []buff;
    //CDialog::OnOK();
}
//同学写的检验函数
char * CAddressQDlg::checkSum(char *str,int length)
{
    char p,q;               
    char k='\r';
    char j='\n';
    char *temp;
    temp=str;
    temp=temp+2;
    for(p=*(temp+1);*(temp+1)!='*';temp++)
      p=p^*(temp+1);
    q=p;
    p=p&(char)15;
    q=(q&(char)(15<<4));
    strcat(str,&q);
    strcat(str,&p);
    strcat(str,&k);
    strcat(str,&j);
    return str;
}

问题的关键就出在第一句...
Copy code
char *buff=new char[strlen("AT+SSCAN,*")+5]

这句分配出来的空间居然不够..然后发现不分配大于等于63的char空间都会出错,真的不明白..


[ 此帖被lxlcn在2007-12-25 21:58重新编辑 ]
附件: addressQ.rar (26 K) 下载次数:7

顶端 Posted: 2007-12-25 21:22 | [楼 主]
浆果



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 906
威望: 0
浮云: 1039
在线等级:
注册时间: 2005-11-19
最后登陆: 2012-06-11

5come5帮你背单词 [ frustration /frΛs'treiən/ n. 挫折,失败,失效,落空 ]


Copy code
    //问题出在这里
  //strcat会将q的地址里的值往str指向的地址复制(不止一个byte,遇到0为止)
    strcat(str,&q);
    strcat(str,&p);
    strcat(str,&k);
    strcat(str,&j);
    return str;
}
顶端 Posted: 2007-12-25 23:30 | [1 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.011107(s) query 6, Time now is:11-22 17:07, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号