//错误举例1:
//对控制指针进行赋值
int *test_point = NULL;
*test_point = 9;
//正确用法
int *test_point = NULL;
int array[10];
test_point = array;
//错误举例2
char test_string[8];
sprintf(test_string,"1234567890");//char的数组长度不够,导致死机
//正确用法
//推荐使用snprintf
snprintf(test_string,sizeof(test_string),"1234567890");//这样可以防止死机,但是最好长
//度不要越界
//错误举例3
typedef struct test
{
char ctest;
char buf[31];
}testt;
testt kk,tt;
memcpy((&kk)->ctest, (&tt)->ctest, sizeof(testt));//没有取变量地址,造成访问非法内存
//正确用法
memcpy( &((&kk)->ctest), &((&tt)->ctest), sizeof(testt));//取地址就不会死机了
野指针导致的死机
举例:
typedef struct T
{
char *name;
int num;
}test;
test *p = (test*)k_malloc(sizeof(test));
strcpy(p->name,"jim");//这个时候的name是一个野指针,赋值会死机
k_free((char *)p);
可以这样修改:
char array[10];
test *p = (test*)k_malloc(sizeof(test));
p->name = array;//给name指针指向一个实际的地址
strcpy(p->name,"jim");
k_free((char *)p);
也可以这样修改:
typedef struct T
{
char name[10];
int num;
}test;
test *p = (test*)k_malloc(sizeof(test));
strcpy(p->name,"jim");//这个时候的name是一个野指针,赋值会死机
k_free((char *)p);
最后,推荐使用strncpy()函数,这个可以防止内存溢出
|