小程序如下:
1 void Test(void) 2 { 3 char *str = (char *) malloc(100); 4 strcpy(str, “hello”); 5 free(str); 6 if(str != NULL) 7 { 8 strcpy(str, “world”); 9 printf(str); 10 } 11 }
请问运行Test函数会有什么样的结果?
答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str != NULL)语句不起作用!
一、何为野指针?
野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少野指针进行操作很容易造成的程序错误。
二、形成野指针的原因
1.通俗的说