小弟一事不明,请教了!
//小弟一事不明,请教了!
//小弟写了一个linked list 程序
//...
int main()
{
Node<int> *head=NULL,*p,*temp;
int i=20;
while (i>0)
{
p = new Node<int> (i--,head);
head=p;
}
p=head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->NextNode();
}
p=head;
//include 的"node.h"是关于链表节点类的头文件
//请问,在程序中加入
while (p!=NULL)
{
temp=p;
p=p->NextNode();
delete temp;
}
//后,怎样才能知道方才分配给Node实例的 new 空间
//被释放了?
//小地尚属初学,在vc中F11实在无法忍受"mov","push"...只好在此提问
//还有,delete temp之后
//temp 是指向0x........(不存在)吗?
//thanx so much...
问题点数:20、回复次数:6Top
1 楼millet(小米)回复于 2001-06-04 11:52:00 得分 15
delete temp之后
temp 还是指向0x........。但是该内存区域已经被释放了。所以再使用这个指针时会导致访问一个未知的内存区域从而导致异常错误。
Top
2 楼millet(小米)回复于 2001-06-04 11:55:00 得分 0
你不需要用F11跟踪到delete语句中间去。
在监视窗口你会发现,当delete temp;之前,可以看到temp所指向的Node内容,在删除后就看不到了。Top
3 楼rainday(雨后的蘑菇)回复于 2001-06-04 12:54:00 得分 0
Thanx
小米兄初到便行侠仗义一把
替兄扬名...
data 后来都变成了-572662307(十进制) -22222223(十六进制)
还有一半未初始化的指针都指向0xCCCCCCCC
Q:(1)这些数为什么这么整齐
(2)Win2k下经常跳出"@#$指令调用0xcccccccc(or other...)内存,该内存不能为"read"(or "write")..." 这是您说的"异常错误"吗?
喜钱我玩"quake"
Top
4 楼rainday(雨后的蘑菇)回复于 2001-06-04 13:03:00 得分 0
Thanx
小米兄初到便行侠仗义一把
替兄扬名...
data 后来都变成了-572662307(十进制) -22222223(十六进制)
还有一半未初始化的指针都指向0xCCCCCCCC
Q:(1)这些数为什么这么整齐
(2)Win2k下经常跳出"@#$指令调用0xcccccccc(or other...)内存,该内存不能为"read"(or "write")..." 这是您说的"异常错误"吗?
以前我装"quake"每开始游戏必出此提示
后从装系统再装quake则ok
方便的话,请解释一下问题成因...Top
5 楼millet(小米)回复于 2001-06-04 19:08:00 得分 5
(1)这些数为什么这么整齐
估计这就要看操作系统或者是编译器是怎么做的了。更加详细的原因我也不太清楚。反正释放了后就不能用了。
(2)Win2k下经常跳出"@#$指令调用0xcccccccc(or other...)内存,该内存不能为"read"(or "write")..." 这是您说的"异常错误"吗?
这个可能是因为异常的内存访问造成的。你重装系统之前,可能那些程序的某些文件已经有些损坏。常会导致此类问题。
你如果在你的程序中使用以下语句,就多半会出现这个错误了。
char * p; //指针不知道指到什么地方了。
*p = 'a'; //此出会出现异常错误。
Top
6 楼rainday(雨后的蘑菇)回复于 2001-06-04 21:36:00 得分 0
thanx
bro.Top





