指针问题1:未初始化的变量的值 0Xcccccccc -858993460 烫
int:-858993460(十六进制OXCCCCCCCC)(二进制11001100110011001100110011001100)
a、当一个未初始化赋值的时候(至少是vc 下未初始化的内存)默认是0xCCCCCCCC;,他在内存就默认保存为-858993460 即二进制的11001100 11001100 11001100 11001100; 十六进制的CCCCCCCC;而汉字 "烫" 的编码恰好就是1100110011001100:
b、如果变量的数据类型由于你的运算的溢出了,在内存中系统就自动改为-858993460
指针问题2:new 和delete
link *p=new link;
delete p;
p=NULL;
为什么delete之后还能赋值呢?
变量p是在栈上分配的空间,具体的内容在堆上,也就是你new的那部分内容。
当你delete时,受影响的是堆的内容,而栈上的这个p没有发生丝毫的改变,是什么还是什么。
既然,你在声明p的时候,可以给他赋值,那么为什么在后面就不能了呢? 当然是可以的,它还是那个p.
0xcdcdcdcd - Created but not initialized
0xdddddddd - Deleted
0xfeeefeee - Freed memory set by NT's heap manager
0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ
0xabababab - Memory following a block allocated by LocalAlloc()
int:-858993460(十六进制OXCCCCCCCC)(二进制11001100110011001100110011001100)
a、当一个未初始化赋值的时候(至少是vc 下未初始化的内存)默认是0xCCCCCCCC;,他在内存就默认保存为-858993460 即二进制的11001100 11001100 11001100 11001100; 十六进制的CCCCCCCC;而汉字 "烫" 的编码恰好就是1100110011001100:
b、如果变量的数据类型由于你的运算的溢出了,在内存中系统就自动改为-858993460
指针问题2:new 和delete
link *p=new link;
delete p;
p=NULL;
为什么delete之后还能赋值呢?
变量p是在栈上分配的空间,具体的内容在堆上,也就是你new的那部分内容。
当你delete时,受影响的是堆的内容,而栈上的这个p没有发生丝毫的改变,是什么还是什么。
既然,你在声明p的时候,可以给他赋值,那么为什么在后面就不能了呢? 当然是可以的,它还是那个p.
这句话是从网上找的,我觉得有点不妥,每个指针未被初始化时值为0xcccccccc这个值是在栈上分配的,而new后它在栈上的值变为了另一个,例如:0x00322d78,同时new在堆上分配了内容,当delete之后发现p的值还是0x00322d78而不是初始的0xcccccccc,说明delete只是释放了堆上的内容而栈上的这个值没改变,所以说这个p的值其实发生了改变,所以我们delete p之后还往往要使p=null,防止发生错误,本人的一点见解,如有错误欢迎指正
指针问题3 指针值得解释
#include<iostream.h>
struct link
{
int data;
link *next;
};
int main()
{
link* p=NULL;指针p未被初始化的值为0xcccccccc,初始化后变为0x00000000
// cout<<p->next;对空指针进行操作操作系统会报错,unhandled exception in .exe;0xc0000005 Access violation 地址越界了
link *q=new link;指针q初始值也为0xcccccccc,new之后变为了另一个值,例如0x00322d78
delete q;delete之后指针q的这个值并没有发生变化,前面问题2有解释
cout<<q;这行可以正常运行
cout<<q->next;这行也可以
//cout<<q->next->next;但是这行出现错误了和上面一样的错误 地址越界,这个不是很明白为什么上面一行可以正常运行,请高人解答
return 0;
}
这里收集了一些常见的地址问题:
0xcdcdcdcd - Created but not initialized
0xdddddddd - Deleted
0xfeeefeee - Freed memory set by NT's heap manager
0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ
0xabababab - Memory following a block allocated by LocalAlloc()