没有初始化的指针是最危险的,因为它可能指向任何地址区域。所以如果没有显示的将其初始化为null,那他肯定不为空。这是释放它所指向的内存。肯定会出错。指针初始化是非常重要的,当我们在声明一个指针的时候请记得给它赋初值NULL,free释放完指针内容的时候也给他赋null指针。谢谢!
定义了一个struct HString{
char *ch;
int length;
};
的串类型,
在接下来的操作中:Status StrAssign(HString &t,char *chars){
int i=0,n;
char *c=chars;
if (t.ch) free(t.ch);
时出错。。。,编译通过,但是运行的时候就跳出一个匡说错误
dbgheap.c文件1011行。。。
我不知道这句if (t.ch) free(t.ch)怎么错了?
写成if (t.ch!=NULL) free(t.ch)也不行
单步调试的时候发现t.ch的值为0xcccccccc,但是判断if的时候却是通过的
在free这个地址的时候出错。。不知道什么原因。。忘高手指教阿!
从t.ch的值为0xcccccccc来看,t.ch指针没有初始化NULL
if (t.ch) free(t.ch);//0xcccccccc != NULL;所以它当然执行啦,但是你没有给指针分配内存,用free来释放它,当然错了。