指针传递分析与解决

 

---------------------------
mypointer_lference.exe - 应用程序错误
---------------------------
"0x6b207369" 指令引用的 "0x6b207369" 内存。该内存不能为 "read"。
要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
---------------------------
确定   取消  
---------------------------

 

//如下为出错源码
void set_arrayvalue_error_01(unsigned char *tmp)
{
    //y以后的内存空间访问是不定的
    strcpy((char *)tmp,"my name is kikop");
}
void testupdate_error_01()
{
 //经过VC++6.0调试可以发现,printf函数实际返回的值为27字符,你那样定义数组,调试的话会发现只有一个myarray[0]有值,虽然后面的值都被加在数组后面,
 //能成功输出你想输出的字符串,但是除了第一个值,后面的访问都是越界的
 
    unsigned char myarray[]={0};    //定义的数组长度实际,被错误的指定为1,这里要特别注意
    set_arrayvalue_error_01(myarray);
    printf("your name:%s\n",myarray);
}

 

 

/************下面为朋友一些相应的解决方法****************/
void set_arrayvalue_solution_01(unsigned char *tmp)
{
    strcpy((char *)tmp,"my name is kikop");
}
void testupdate_solution_01()
{
    unsigned char myarray[100]={0};    //指定长度为100
    set_arrayvalue_solution_01(myarray);
    printf("your name:%s\n",myarray);
}

 

//采用动态分配内存的方式
void set_arrayvalue_solution_02(unsigned char **tmp)
{
 *tmp = (unsigned char *)malloc(100);
    strcpy((char *)*tmp,"my name is kikop");
}
void testupdate_solution_02()
{
    unsigned char *myarray =NULL;    //指定长度为100
    set_arrayvalue_solution_02(&myarray);
    printf("your name:%s\n",myarray);
 free(myarray);
 myarray=NULL;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值