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