这个程序运行怎么会崩溃?
- C/C++ code
struct pList{ int num; struct pList *pNext;};void main(){ pList * head,*pEnd,*p1; head->pNext=pEnd; //head->num=1; head->pNext=p1; //p1->num=2; p1->pNext=pEnd; while(head->pNext!=pEnd) { cout<<head->num; head=head->pNext; }}
[解决办法]
head是个野指针
就不应该使用head->pNext
其他问题类似
[解决办法]
没有指向内存都不行.
[解决办法]
head和p1没有分配空间,哪来的head->pNext和p1->pNext?
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
[解决办法]
使用未初始化或负值的野指针。
[解决办法]
pList * head,*pEnd,*p1;//这几个都还没有new一个地址给它们呀,当然不能使用它们了。
在使用指针时可要判断该指针的有效性哦。
[解决办法]
lz以后要养成指针初始化成null的习惯便于发现错误~
[解决办法]
head是个野指针
就不应该使用head->pNext