最近开发遇到一个crash的问题,记录下来供参考。
文件1:
char a[4]=”abcd”;
文件2:
extern char *a;
分析:
在文件1中,a是数组地址的别名,代表着”abcd”的起始地址。
在文件2中,a被转化为指针,则”abcd”的起始地址成为指针a的地址,里存放的内容是”abcd”,
显然a指向的空间0x61626364 (abcd的ASCII码值)没有意义,易出现非法内存访问。
文件1:
char *a=”abcd”;
文件2:
extern char a[];
分析:
在文件1中,假设指针a的指针是0x11111111,里面存放的地址是0x22222222,0x22222222这个地址存放的内容是”abcd”.
在文件2中,指针被转化成数组,a是数组地址的别称,那么数组a的地址是0x11111111,数组的内容变成了0x22222222.