唷!我又来问问题了!这次是free()的重点是在最后,能用free(c)但当用free(b)时,就会crash掉了!!这是什么回事
唷!我又来问问题了!这次是free()的
重点是在最后,能用free(c)
但当用free(b)时,就会crash掉了!!
这是什么回事?!
话说.....
当我调用已经被free掉的数据,数据依然在...
那我到底是有没有把它们释放...
b成了野指针,意图释放一个野指针,当然会崩溃 至于free的意义的话,将将要free掉的那块内存标记为可用 就是改变操作系统中空闲链表
刚刚试了试,果然位置不是指向malloc的,那它变成了指向fscanf所输入的容里面的吗?
大小是多少?还是根据输入的数量决定?
感觉的malloc对它变得没有意义了 0口0...
b的值就是你fscanf()到b里面的值 fscanf(as,"%s",&b);b的值取决于你从as那边读了什么东西到b中。因此b指向的内存是不确定的,b就是一个野指针
[解决办法]你从文件里读出来的内容,把原本应该用来保存你malloc出来的内存空间地址的值给覆盖掉了
所以你再free(b)的时候,b指向的地址值不是malloc的出来的地址了,而是你读出来的内容!
所以free的时候已经不是malloc出来的内存空间了,所以出问题了!
fscanf(as,"%s",b); //这样就好了!后面free(b)就不会有问题啦!
呜呜呜......我快疯了...快又搞不清b跟&b的意思了...
fscanf("%s",&b);不是将数据存到b指标地址吗?不是存放到的malloc里的空间吗?
而b自身不是作为指标的大小吗?
如果将内容存到...
那......
其实char b [20];跟char *b=malloc(20);
差异在哪...
如果要放进数据,什么时候该用&b,什么时候该用b?
char *b = (char*)malloc(1000);
b是指向了malloc分配的内存空间的首地址了,你每次使用malloc这块内存空间的话,直接调用b就好了
&b是b这个指针本身直接存放的内存地址的!4个字节大小而已!