我在main函数中定义了变量
unsigned int *lp = NULL;
然后调用了函数A,函数A的定义如下
int A(const char *cp, unsigned int *lp)
{
/**cp是传进来的字符串*/
char cps[] = cp;
/*对*lp做位操作*/
*lp << 8;
}
编译时Asan检查两处报错如下:
我有这些问题:
1.使用数组接收字符串为什么会报非法初始化?
2.第二处位操作的部分,我是想要在这里改变这个指针变量所指向的值,这个写法应该是不对的,但为什么会报内存错误呢?
3.位操作这一步,想实现改变指针变量指向值都可以有哪些写法呢?
——————————————————————————————————————————————————————————————————————————————————
2、3处纠错:
问题出在我调用的时候,我在主函数里进行了下面的调用
char* test[] = {"192.168.10.1", "255.255.255.255"};
unsigned int* lp = 0;
A(test[i], lp);
这样调用的话,lp调用为传值调用,初始化的时候lp初始化为了NULL,编译运行可以观察到lp为0,即指向了NULL指针,将lp作为参数调用,传进函数里则为传递了NULL指针。
调用时将lp改为&lp该处错误就解决了
——————————————————————————————————————————————————————————————————————————
char[] = "xxxx";
是可以的,char[] = cp;
不可以。*lp
要读取lp
内所保存的地址的值,而lp
保存的地址是NULL
,不可读。*lp = *lp << 8;
,*lp <<= 8;