指针传递分析与解决

来源:互联网 发布:网络正常 电脑连不上网 编辑:程序博客网 时间:2024/04/28 05:28

 

---------------------------
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;
}

原创粉丝点击