摘要:
C中的野指针,C++中的迷途指针(失控指针或悬浮指针)都是不是NULL的指针,也不是指向常量的指针,而是指向“垃圾”内存的指针。“垃圾”的意思是未知区域、未知内存。一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != 阅读全文
posted @ 2013-03-04 13:39
weicomm
阅读(120)
评论(0)
推荐(0)
摘要:
动态变量和静态变量的区别:1、存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区)2、生命期动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变量将失效静态变量:程序结束时才释放3、作用域动态变量:同样的要根据你定义的位置才能确定,和第二点的一样静态变量:当前文件中有效堆和栈的区分:堆(Heap)栈(Stack)1、内存分配方面:堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。栈:由编译器(Com 阅读全文
posted @ 2013-03-04 13:38
weicomm
阅读(125)
评论(0)
推荐(0)
摘要:
main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出为:2,5请解释以上代码的输出结果。答案如下:*(a+1)其实很简单就是指a[1],输出为2.问题关键就在于第二个点,*(ptr-1)输出为多少?解释如下,&a+1不是首地址+1,系统会认为加了一个整个a数组,偏移了整个数组a的大小(也就是5个int的大小)。所以int *ptr=(int *)(&a+1);其实ptr实际是&(a[5]),也就是a+5.原因为何呢?& 阅读全文
posted @ 2013-03-04 13:16
weicomm
阅读(118)
评论(0)
推荐(0)

浙公网安备 33010602011771号